我正在java web项目中使用hiberante-entity manager实现jpa持久性。 我在persistence.xml中设置了以下属性。
<property name="hibernate.hbm2ddl.auto" value="update"/>
我为每个用户都有一个架构。例如,我有一个user1架构和一个user2架构。 如果表'ABC'存在于user1架构中但不存在于user2架构&amp;我部署应用程序并使用user2数据库凭据,我收到消息'user1.ABC'表,因此不会在user2架构中创建'ABC'表。
当我尝试在persistence.xml文件中使用以下属性时,表在user2架构中创建。
<property name="hibernate.hbm2ddl.auto" value="create"/>
我的问题是 如果应用程序使用user2 db凭据,为什么hibernate在另一个模式中搜索,即user1?和 我不希望每次启动服务器时都创建模式,所以我怎么能避免使用 价值'创造'。
编辑:下面是我的persistence.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>
提前致谢
答案 0 :(得分:2)
我也面临同样的问题,经过深入挖掘后,了解该漏洞与Mysql Connector有关。 将MySql Connector 6.0.5 更改为 5.1.28 后,它对我来说很好。 我希望它可以帮到你。干杯
答案 1 :(得分:0)
这是不可能的。他们应该是一些配置错误的其他环境问题..请在此处发布您的配置文件以获得进一步的帮助..
干杯!
答案 2 :(得分:0)
有同样的问题。
设置<property name="hibernate.default_schema" value="MY_SCHEMA"/>
后问题已解决。
答案 3 :(得分:0)
检查您是否在Hibernate Sessionfactory中调用了user1和user2。
答案 4 :(得分:0)
如果您要正确处理several schemas
,请使用multi-tenant per schema
,如果您要更新/创建/迁移/处理columns/tables/schemas/databases
,请使用flyway
或{{1} }
参考
多租户https://vladmihalcea.com/hibernate-database-schema-multitenancy/
Flyway https://flywaydb.org
Liquibase https://www.liquibase.org
答案 5 :(得分:0)
Hibernate文档对此很清楚,您需要启用多租户操作as described in this answer和this example。
基本上,您必须声明多个持久性单元,并且每个点都指向不同的架构。每个人也可以使用不同的登录凭据。
总结:
使用JPA时,添加以下内容: 3.从SessionFactory指定租户标识符 4.实施MultiTenantConnectionProvider