编程语言
首页 > 编程语言> > java-具有聚合属性的EJB3 / JPA实体

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;
}

参考文献

>休眠注释参考指南

> 2.4.3.1. Formula

资源资源

> Hibernate Derived Properties – Performance and Portability

标签:entity-relationship,orm,jpa,hibernate,java
来源: https://codeday.me/bug/20191105/1997909.html