[英]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
可以實現可接受的解決方案(即獲取最新B
的Date
)。
@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.