java-具有聚合属性的EJB3 / JPA实体
作者:互联网
我想知道是否有一种方法可以建立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实体对象中进行字段lastB的映射?
也许这个question给出了一些答案,但是实际上我不明白它是如何工作的,因为我仍然希望能够获取所有child对象.
感谢您的阅读/帮助.
PS:我将hibernate用作ORM / JPA提供程序,因此如果不存在JPA解决方案,则可以提供Hibernate解决方案.
PS2:或者只是告诉我,我不应该这样做(当然要带参数);-)
解决方法:
I use hibernate as ORM/JPA provider, so an Hibernate solution can be provided if no JPA solution exists.
使用@Formula可以实现可接受的解决方案(即,获取最新B的日期).
@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;
}
参考文献
>休眠注释参考指南
资源资源
> Hibernate Derived Properties – Performance and Portability
标签:entity-relationship,orm,jpa,hibernate,java 来源: https://codeday.me/bug/20191105/1997909.html