2013-02-08 245 views
2

我有我的類定義了兩個實體管理器實例,其中一個覆蓋的PersistenceContextproperties屬性,其中一個不會:如何使用@PersistenceContext註釋的`屬性`屬性?

@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
  • 休眠

所有幫助表示讚賞,感謝。

+0

從來沒有嘗試過這個,但你有沒有試過兩個不同的持久化單元指向具有不同模式的相同數據源?這是一個更多的標記,但如果它是緊急...... :-) – 2013-02-08 16:03:29

+0

是的,但這不適合我...如果我嘗試了兩個不同的持久單元指向,我的應用程序沒有與消息部署:引起:java.lang。 IllegalArgumentException:JBAS011470:未指定持久性unitName,並且在應用程序部署「highway-ear.ear」中有2個持久性單元定義。將應用程序更改爲只有一個持久性單元定義,或者爲持久性單元的每個引用指定unitName。 但我設置單位名稱:@PersistenceContext(unitName =「primary」)&@PersistenceContext(unitName =「archive」) – Krab 2013-02-08 16:10:38

+0

第二個想法,它*可能*是你所嘗試的不會在JPA中工作。因爲實體類映射到數據庫中的特定表。你正試圖爲同一個班級設置兩個映射。在合併到存檔持久性單元之前,您正在分離,對嗎?因爲它在連接時肯定不起作用。 – 2013-02-08 16:15:54

回答

0

也有其他的方式來做到這一點,但這裏是一個另類:

  1. 定義您的persistence.xml
  2. 對於定義的每個持久化單元中的兩個元素,指定實體的目標名稱每個持久性單元使用元素

這應該負責隔離持久化單元中的實體。