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


相关推荐

  • ssd1315驱动oled屏_oled屏幕的手机有哪些

    ssd1315驱动oled屏_oled屏幕的手机有哪些淘宝隔壁老王家的OLED运动手环,非常的便宜2RMB一个。###Part0:可用器件列表0x00:OLDE屏幕:0.91inch,分辨率:12832,主控:SSD1306,接口:SPI,颜色:

    2022年8月4日
    2
  • 听我讲完redo log、binlog原理,面试官老脸一红

    听我讲完redo log、binlog原理,面试官老脸一红MySQL 问题答得很好 收到入职通知后 却发现被 HR 坑了 有毒

    2025年7月21日
    1
  • 如何构建NTP时间服务器「建议收藏」

    NTP服务器是用于局域网服务器时间同步使用的,可以保证局域网所有的服务器与时间服务器的时间保持一致,某些应用对时间实时性要求高的必须统一时间。互联网的时间服务器也有很多,例如ntpdatentp.fudan.edu.cn复旦大学的NTP免费提供互联网时间同步。NTP服务器监听端口为UDP的123,那就需要在本地防火墙开启运行客户端访问123端口,vi/etc/sysconfig/iptables添加如下规则:-AINPUT-mstate–stateNEW-mudp-pudp

    2022年4月12日
    28
  • Drupal开发学习入门指引[通俗易懂]

    Drupal开发学习入门指引[通俗易懂]我是云客,《云客drupal8源码分析》系列的作者,伴随着drupal8第一个正式版本发布到现在,该系列已经发布100期,超过60万字,作为中国投入精力最大、同时也是时间最早的第一批用户之一,云客觉得有义务帮助初学者准备好行囊,叮嘱好一路上的注意事项,之前也零星写过一些入门方面的资料,会在本文末给出链接(这些资料也很值得参考),本篇将为您全面整理需要的一切和规划学习步骤,这里假定您是一个刚刚学会p…

    2022年6月9日
    36
  • php使用PdfParser搭配tcpdf解析pdf文件

    php使用PdfParser搭配tcpdf解析pdf文件前几天客户提出一个需求,就是在前台页面搜索文章时,若搜索词在文章附件的pdf文件中有出现的话就要将该文章作为搜索结果。我的思路是后台发布文章时循环检测每一个附件的格式,若附件格式为pdf的话就将里面的文字读取出来追加到一个$string变量里,然后将$string的作为一个file_text字段的信息保存到数据库后面做搜索的时候使用。我参考的一个回答地址是:https://baijiahao……

    2022年9月8日
    0
  • Axios跨域请求配置「建议收藏」

    Axios跨域请求配置「建议收藏」    React中用到的网络代理请求是axios,它在使用的过程中,会存在一些问题,今天就分享我遇到过的一些问题1、跨域请求后台配置:在SpringBoot项目中的,需要实现WebMvcConfigurer,并且重写addCrosMappings方法@ConfigurationpublicclassApplicationAutoConfigurationimplementsWebMvcConfigurer{ @Override public

    2022年9月11日
    1

发表回复

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

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