大家好,又见面了,我是你们的朋友全栈君。
在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表,如图:
一.实体类
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>
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105687.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...