有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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>

提前谢谢


共 (5) 个答案

  1. # 1 楼答案

    也有同样的问题。 设置<property name="hibernate.default_schema" value="MY_SCHEMA"/>后问题就解决了

  2. # 2 楼答案

    检查是否在Hibernate Sessionfactory中调用user1和user2

  3. # 4 楼答案

    我也面临着同样的问题,在深入挖掘之后,我知道这个bug与Mysql连接器有关。 将MySql Connector6.0.5更改为5.1.28后,它对我来说运行良好。 我希望它能帮助你。干杯

  4. # 5 楼答案

    Hibernate文档对此很清楚,您需要启用多租户操作as described in this answerthis example

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

    Hibernate documentation link

    总结如下:

    1. 定义你的持久性单元
    2. 定义每个持久化单元的映射文件

    使用JPA时,添加以下内容: 3.从SessionFactory中指定租户标识符 4.实现多租户连接提供程序