Hibernate实体经理在不同的模式中寻找表

时间:2013-11-19 11:18:01

标签: java hibernate jpa

我正在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>

提前致谢

6 个答案:

答案 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 answerthis example

基本上,您必须声明多个持久性单元,并且每个点都指向不同的架构。每个人也可以使用不同的登录凭据。

Hibernate documentation link

总结:

  1. 定义您的持久性单元
  2. 定义持久性单元的映射文件

使用JPA时,添加以下内容:  3.从SessionFactory指定租户标识符  4.实施MultiTenantConnectionProvider