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


相关推荐

  • FLAG_ACTIVITY_CLEAR_TOP:「建议收藏」

    FLAG_ACTIVITY_CLEAR_TOP:「建议收藏」FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:ABCD。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_TOP标记,则栈情况变为:AB。如果没有添加这个标记,则栈情况将会变成:ABCDB。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_TOP标记,并且目标Activity在栈中已经存在,则将会把

    2022年7月17日
    23
  • C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】

    C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】

    2022年3月13日
    57
  • 数据库隔离级别详解[通俗易懂]

    数据库隔离级别详解[通俗易懂]之前,我们有讲过数据库的索引,链接为数据库索引详解今天,我们将讲解数据库的隔离级别。一、隔离级别的种类与分别可以解决的问题:事务的隔离级别分为4个,即读未提交(readuncommitted)、读已提交(readcommitted)、可重复读(Repeatableread)、可串行化(Serializable)oracle默认的隔离级别为读已提交。mysql的默…

    2022年5月26日
    40
  • 如何用anaconda下载python_如何安装配置anaconda与Pycharm「建议收藏」

    如何用anaconda下载python_如何安装配置anaconda与Pycharm「建议收藏」如何安装配置anaconda与Pycharm发布时间:2020-11-0715:29:18来源:亿速云阅读:88如何安装配置anaconda与Pycharm?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。关于文件下载官网都有提供最新版本的推荐自行下载,如果不介意旧版本的,可以留言我可以分享我是用的版本~Anaconda安装打开下载的….

    2022年8月29日
    4
  • mysql的where条件后加case_recommend

    mysql的where条件后加case_recommend背景:数据库用的Oracle;报表用的是【FineReport】,之前没用过,被临时授命解决问题,所以大概了解了一下。里面应该是集成了excel插件,报表样式如下:今天在项目中遇到一个这样的场景:A为汇总页面,显示的是按医院分组统计出来的一些数据,效果如下图图中每一列都能下钻到另一个页面,医院名称和起始时间都作为参数传送。前期因为某一些需求,有一家医院出现了两个不同的名…

    2025年9月3日
    7
  • apt一键下载所有依赖的包_apt自动安装依赖包

    apt一键下载所有依赖的包_apt自动安装依赖包这几天从书本上见识到了aptitude包管理工具的魅力,果断想在自己的UbuntuKylin16.10上玩一玩。没想到遇到了很多的问题~~~apt源更新,编辑apt源配置文件 /etc/apt/sources.list发现vi使用起来好费劲,只能用delete删除 而上下键和backspace键都没法正常使用。还有看启动栏在左侧Left 有点不习惯,也做了设置:按下Ctrl+Al…

    2025年7月1日
    5

发表回复

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

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