簡體   English   中英

具有聚合屬性的EJB3 / JPA實體

[英]EJB3/JPA entity with an aggregated attribute

我想知道是否有辦法在One2Many關系中獲得一方的領域,這是多方的聚合。

我們來看下面的例子:

@Entity
public class A {
 @Id
 private Long id;
 @OneToMany (mappedBy="parentA")
 private Collection<B> allBs;

 // Here I don't know how to Map the latest B by date
 private B latestB;
    // Acceptable would be to have : private Date latestBDate;
}

@Entity
public class B {
 @Id
 private Long id;
 private Date date;
 @ManyToOne (targetEntity=A.class)
 private A parentA;
}

我的問題是如何在A實體對象中進行字段latestB的映射而不進行任何去規范化(不與觸發器/偵聽器保持同步)?

也許這個問題給出了一些答案,但實際上我不明白它是如何工作的,因為我仍然希望能夠獲取所有的子對象。

感謝閱讀/幫助。

PS:我使用hibernate作為ORM / JPA提供程序,因此如果不存在JPA解決方案,可以提供Hibernate解決方案。
PS2:或者告訴我,我不應該這樣做(當然有論據);-)

我使用hibernate作為ORM / JPA提供程序,因此如果不存在JPA解決方案,則可以提供Hibernate解決方案。

使用@Formula可以實現可接受的解決方案(即獲取最新BDate )。

@Entity
public class A {
    @Id
    private Long id;
    @OneToMany (mappedBy="parentA")
    private Collection<B> allBs;

    @Formula("(select max(b.some_date) from B b where b.a_id = id)")
    private Date latestBDate;
}

參考

資源

看到,

http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Filtering.2C_Complex_Joins

基本上JPA不支持這一點,但一些JPA提供商會這樣做。

您還可以, - 使變量瞬態和延遲從OneToMany初始化它,或者只提供搜索OneToMany的get方法。 - 定義另一個最新的外鍵。 - 刪除關系,只查詢最新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM