【发布时间】:2013-01-24 10:36:12
【问题描述】:
我在我的类中定义了两个实体管理器实例,其中一个覆盖了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) 保存实体时,它会保存到默认的公共架构中。似乎属性 hibernate.default_schema 没有设置 - 但为什么呢?如何切换架构?
我的工具/环境:
- JBoss 7.1
- EJB
- JPA
- 休眠
感谢所有帮助,谢谢。
【问题讨论】:
-
我自己从未尝试过,但是您是否尝试过两个不同的持久性单元,它们指向具有不同架构的同一数据源?这是一个多一点的标记,但如果它是紧急的...... :-)
-
是的,但这对我不起作用...如果我尝试两个不同的持久性单元指向,我的应用程序未部署消息:原因:java.lang.IllegalArgumentException: JBAS011470: Persistence unitName was not指定并且在应用程序部署“highway-ear.ear”中有 2 个持久性单元定义。要么将应用程序更改为只有一个持久性单元定义,要么为对持久性单元的每个引用指定 unitName。但我设置了单位名称:@PersistenceContext(unitName="primary") & @PersistenceContext(unitName="archive")
-
再想一想,可能你正在尝试的东西在 JPA 中不起作用。因为实体类映射到数据库中的特定表。您正在尝试为同一个类创建两个映射。在合并到存档持久性单元之前,您正在分离,对吗?因为它仍然连接时肯定行不通。
-
This answer 可能会有所帮助。
标签: java hibernate jpa ejb jboss7.x