我在我的类中定义了两个实体管理器实例,其中一个覆盖了 PersistenceContext
的 properties
属性,而另一个则没有:
@PersistenceContext
protected EntityManager em;
@PersistenceContext(properties={@PersistenceProperty(name="hibernate.default_schema", value="archive")})
protected EntityManager emArchive;
我这样做是为了定义一个实体管理器附加到我的默认架构,另一个实体管理器附加到我的存档架构。
这是我的 persistance.xml:
<persistence-unit name="primary" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/PCMain_DS</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<!-- property name="hibernate.hbm2ddl.auto" value="update" /-->
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
不幸的是,我的程序似乎无法正常工作,因为当我使用存档实体管理器 (emArchive) 保存实体时,它会保存到默认的公共(public)架构中。似乎没有设置属性 hibernate.default_schema
- 但为什么呢?我如何切换模式?
我的工具/环境:
- JBoss 7.1
- EJB
- JPA
- hibernate
感谢所有帮助,谢谢。
最佳答案
还有其他方法可以做到这一点,但这里有一种选择:
- 在 persistence.xml 中定义两个元素
- 对于定义的每个持久性单元,使用元素指定针对每个持久性单元的实体的名称
这应该负责在每个持久性单元中持久存在的实体的隔离。
关于java - 如何使用@PersistenceContext 注解的 `properties` 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776346/