hibernate实现多租户[通俗易懂]

hibernate实现多租户[通俗易懂]hibernate实现多租户

大家好,又见面了,我是你们的朋友全栈君。

在Hibernate4.0中多租户有三种模式:

1.NONE:默认值,非多租户。

2.SCHEMA:一个租户一个Schema

3.DATABASE:一个租户一个database

4.DISCRIMINATOR:租户共享数据表,在Hibernate5中实现

在我们的项目中现在用到的是“一个租户一个Schema”的模式。

实现demo:

1.数据库

在数据库中新建两个Schema,名字分别为hotel_1和hotel_2

在hotel_1和hotel_2中新建一张guest表,如图:

hibernate实现多租户[通俗易懂]

一.实体类

Login实体:

package hotel.model;

public class Login {
	private String username;
	private String password;
	private static String tenantId;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public static String getTenantId() {
		return tenantId;
	}
	public static void setTenantId(String tenantId) {
		Login.tenantId = tenantId;
	}
	
	
}

二.配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
          
<hibernate-configuration>

    <session-factory>
        <!-- 这里的test是物理库的名字 -->
        <property name="connection.url">jdbc:mysql:///test?useUnicode=true&characterEncoding=utf8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <property name="hibernate.connection.autocommit">false</property>
        <property name="hibernate.cache.use_second_level_cache">false</property>
        <property name="show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto" >create</property>
        <property name="hibernate.multiTenancy">SCHEMA</property>
        <!-- hibernate.tenant_identifier_resolver属性规定了一个合约,以使 Hibernate 能够解析出应用当前的 tenantId,-->
        <!-- 该类必须实现 CurrentTenantIdentifierResolver 接口,通常我们可以从登录信息中获得 tenatId。 -->
        <property name="hibernate.tenant_identifier_resolver">hotel.dao.hibernate.TenantIdResolver</property>

        <!-- 指定了 ConnectionProvider,即 Hibernate 需要知道如何以租户特有的方式获取数据连接 -->
        <property name="hibernate.multi_tenant_connection_provider">hotel.dao.hibernate.SchemaBasedMultiTenantConnectionProvider</property>

        <mapping class="hotel.model.Guest" />

    </session-factory>
</hibernate-configuration> 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105687.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • css实现横向滚动条(css纵向滚动条)

    注意:(滚动条设置的width、height,分别是对应纵向滚动条宽度、横向滚动条高度,无法修改纵向滚动条高度、横向滚动条宽度数值只介绍Google浏览器滚动条样式,常用属性如下)::-webkit-scrollbar 滚动条整体样式 ::-webkit-scrollbar-button 一设置滚动条样式,滚动条两端的按钮图标就消失,但可以重新设置图片、新样式 ::-w…

    2022年4月10日
    226
  • 角度与弧度互转_如何将角度转为弧度

    角度与弧度互转_如何将角度转为弧度1、角度定义   两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度。(单位:º)2、弧度定义   两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度(单位:rad)。可简单理解为:弧度=弧长/半径3、弧长与弧度   3.1圆的周长C的计算…

    2022年4月19日
    74
  • 高速电平转换芯片_电平转换电路分压

    高速电平转换芯片_电平转换电路分压现在很多SOC器件为了降低功耗,都把IO口的电平设计成了1.8V,核电压0.85V,当这种SOC做主平台时,在做接口设计需要格外关注电平的匹配。单板中经常需要将1.8V的电平转换成3.3V或者转成5V。如果没有注意到输入和输出信号之间的电平匹配,系统就无法正常工作。这篇文章主要从两个简单的案例入手,分析电平转换电路需要注意的一些问题,以及在此类芯片数据手册中几个重要参数的解读,对开发人员来说,掌握这些器件的参数是器件选型必须关注的点。三极管做电平转换以常见的三极管做1.8V转3.3V为案例。电路图

    2022年8月10日
    12
  • 基于51单片机四路循迹小车

    基于51单片机四路循迹小车这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~

    2022年6月23日
    22
  • 华为云远程登录_华为云电脑如何远程连接电脑

    华为云远程登录_华为云电脑如何远程连接电脑引言最近在自己的华为云服务器上想装一个MySQL作为远程的数据库使用,数据库安装之后在本地访问远程数据库遇到了问题,一直报错10038,于是开始了漫长的翻帖爬楼的历程。在这里将这爬楼的历程记录下来。总的来说,(10038)错误有以下几种解决方式:1.mysql数据库user表的host由localhost改为%2.更改root用户的授权(与1相似)…

    2022年8月31日
    2
  • JS数组合并(5种)

    JS数组合并(5种)前言项目过程中,经常会遇到JS数组合并的情况,时常为这个纠结。这里整理一下。简单而实用的for最容易想到的莫过于for了。会变更原数组,当然也可以写成生成新数组的形式。letarr=[1,2]letarr2=[3,4]for(letiinarr2){arr.push(arr2[i])}console.log(arr)//[1,2,3,4]arr.concat(arr2)会生成新的数组。letarr=[1,2]let

    2022年6月30日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号