java Hibernate实体管理器查找不同模式中的表
我正在java web项目中使用Hibernate实体管理器实现jpa持久性。 我在持久性中设置了以下属性。xml
<property name="hibernate.hbm2ddl.auto" value="update"/>
我对每个用户都有一个模式。例如,我有一个user1模式和一个user2模式。 如果表'ABC'存在于user1模式中,但不存在于user2模式中&;我部署应用程序,它使用user2db凭据,我得到消息“user1”。已找到“ABC”表,因此未在user2架构中创建“ABC”表
当我尝试在持久性中使用以下属性时。xml文件该表是在user2模式中创建的
<property name="hibernate.hbm2ddl.auto" value="create"/>
我的问题是 如果应用程序使用的是User2DB凭据,为什么hibernate会在另一个模式(即user1)中搜索?和 我不想每次启动服务器时都创建模式,所以如何避免使用 “创造”的价值
编辑:下面是我的坚持。xml文件
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="XXXXXX" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.axonframework.saga.repository.jpa.SagaEntry</class>
<class>org.axonframework.saga.repository.jpa.AssociationValueEntry</class>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
提前谢谢
# 1 楼答案
也有同样的问题。 设置
<property name="hibernate.default_schema" value="MY_SCHEMA"/>
后问题就解决了# 2 楼答案
检查是否在Hibernate Sessionfactory中调用user1和user2
# 3 楼答案
如果你想正确地处理
several schemas
,那么使用multi-tenant per schema
。如果你想更新/创建/迁移/处理columns/tables/schemas/databases
,那么使用flyway
或liquibase
参考资料
多租户https://vladmihalcea.com/hibernate-database-schema-multitenancy/
飞道https://flywaydb.org
液化酶https://www.liquibase.org
# 4 楼答案
我也面临着同样的问题,在深入挖掘之后,我知道这个bug与Mysql连接器有关。 将MySql Connector6.0.5更改为5.1.28后,它对我来说运行良好。 我希望它能帮助你。干杯
# 5 楼答案
Hibernate文档对此很清楚,您需要启用多租户操作as described in this answer和this example
基本上,您必须声明多个持久性单元,并使每个点指向不同的模式。然后,每个人也可以使用不同的登录凭据
Hibernate documentation link
总结如下:
使用JPA时,添加以下内容: 3.从SessionFactory中指定租户标识符 4.实现多租户连接提供程序