2015-02-09 64 views
1

我有兩個實體之間的單向關係:JPA級聯多個persistenceUnits

*@Entity 
public class XXX{ 
    @Id 
    private Long Id; 
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinColumn(name = "YYY_ID") 
    private YYY yyy; 
} 
@Entity 
public class YYY{ 
    @Id 
    private Long Id; 

    private String someName; 
}* 

的實體屬於同一個數據庫不同的模式(但我可能不會使用synonims,或者給予補助的模式。 ..),所以我有兩個持久性單元:

1.persistenceUnit(XXX) - 實體XXX被映射有

2.persistenceUnit(YYY) - 實體yyy是映射有

我可以讓jpa自動執行其他持久性單元上的級聯嗎? 例子:

@PersistenceContext(unitName = "xxx") 
private EntityManager em; 

XXX xxx = new XXX(); 
YYY yyy = new YYY(); 
yyy.setSomeName("just some name"): 
xxx.setYYY(yyy); 
em.persist(xxx); 

這應該創建兩個對象...

這可能嗎?幫助讚賞。我使用JPA2,Jboss7上的Hibernate 4

回答

1

JPA規範並未要求支持跨多個持久單元的映射。

但是,根據您的數據庫權限,您可以使用一個持久性單元並使用@Table註釋爲不在默認模式中的任何實體指定方案/目錄。

@Entity 
@Table(schema="xyz") 
public class XXX{ 
    @Id 
    private Long Id; 
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinColumn(name = "YYY_ID") 
    private YYY yyy; 
} 

否則,你就需要尋找在數據庫級別的解決方案或考慮使用提供具體的解決方案:我不知道的東西對Hibernate但見,例如,下面的EclipseLink功能:

https://wiki.eclipse.org/EclipseLink/Examples/JPA/Composite

與EclipseLink的JPA 2.3.0開發商從現在開始,可以在運行時允許企業合併 持久單位共同存儲 在不同的數據庫。 這包括在不同的持久化單元的實體之間的關係 支持(跨 數據庫的引用)

+0

不,我不能,因爲我以前說過:在實體屬於同一個數據庫不同的模式(但我可能不使用synonims,或給模式...)。所以一個模式不會看到另一個模式。 – cage 2015-02-09 15:09:10