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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • murmurhash算法_自我介绍的方式

    murmurhash算法_自我介绍的方式加密哈希和非加密哈希-MM是非加密哈希首先了解下加密哈希和非加密哈希,加密哈希函数旨在保证安全性,很难找到碰撞。即:给定的散列h很难找到的消息m;很难找到产生相同的哈希值的消息m1和m2。非加密哈希函数只是试图避免非恶意输入的冲突。作为较弱担保的交换,它们通常更快。如果数据量小,或者不太在意哈希碰撞的频率,甚至可以选择生成哈希值小的哈希算法,占用更小的空间。Smhasher-评价哈希算法的…

    2022年10月9日
    2
  • 安卓数据转移到iphone老是中断_安卓换iPhone数据怎么转移?这款神器一键搞定「建议收藏」

    安卓数据转移到iphone老是中断_安卓换iPhone数据怎么转移?这款神器一键搞定「建议收藏」每天12:18准时给大家惊喜!大家好!我是好奇仔,热衷于搜罗和分享各种好用、实用的软件神器和资源,有手机软件、办公软件、APP,还有网站资源……来自:PConline,作者:我爱我家换新手机了,内心当然是巨爽无比了!可是换机时有个步骤却让人觉得有点麻烦,那就是如何将旧手机的资料转移到新手机里去,安卓与iOS又如何互通呢?以前的操作得先将数据导出到电脑,然后可能还需要进行数据格式转换,接…

    2022年5月26日
    191
  • ASP.NET MVC 模式的优缺点「建议收藏」

    ASP.NET MVC 模式的优缺点「建议收藏」http://www.enet.com.cn/eschool/video/c_peng/看别人的视频开始学习第一课。

    2022年7月22日
    14
  • MySQL 拼接字符串_合并字符串的库函数是

    MySQL 拼接字符串_合并字符串的库函数是原文请查看MySQL拼接字符串函数CONCAT这里selectconcat(updatesale_personbodysetoldill_code=/,code,/,oldill_reportname=/,reportname,/,oldill_oldtitle=/,oldtitle,/whereoldill=)fromtj_oldill

    2022年9月1日
    9
  • pidstat_使用pidstat查看进程资源使用情况

    pidstat_使用pidstat查看进程资源使用情况引言在查看系统资源使用情况时,很多工具为我们提供了从设备角度查看的方法。例如使用iostat查看磁盘io统计信息:linux:~#iostat-d3Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtnsda1.670.0040.000…

    2025年5月23日
    4
  • 机器人控制系统有哪些_abb机器人创建系统

    机器人控制系统有哪些_abb机器人创建系统 一、ROS简介与安装 那么在学习使用ROS之前,首先问一个问题:为什么需要机器人操作系统?机器人操作系统与现有的Linux或Windows操作系统有什么不同呢?大家知道,操作系统的诞生,就是为了提供硬件和软件间的接口,以便程序员编写程序时可以专注于设计算法,而不必关心底层硬件是如何实现的。那么,对于不同的硬件平台,面对不同的功能需求,自然也需要设计不同的操作系统来完成任务。机器…

    2025年5月23日
    3

发表回复

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

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