我有几个具有 @ManyToOne 和 @OneToMany 关系的实体,问题是我正在寻找一种方法来获取从关系的 @OneToMany 端插入的最后一条记录,而不加载列表中的所有记录,实际上,我将最后一条记录保存在 ClassB 中的 @OneToOne 关系中,但这会与 FK 约束产生太多冲突。以下是其外观的摘录:
public class ClassA {
@Id
public Long id;
@ManyToOne
public ClassB classB;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
public Date startDate;
}
public class ClassB {
@Id
public Long id;
@OneToMany(mappedby = "classB", fetch = FetchType.LAZY)
public List<ClassA> classAList = new ArrayList<>();
@OneToOne
public ClassA lastClassA; // Generates a bidirectional FK, and unable the entity for deletion.
}
这些类之间的交互是ClassA
随着时间的推移累积并保存链接到ClassB
, 在那个时间ClassB
做一些工作,它只需要last ClassA
创建实例(这将是当前ClassA
), 之前的实例ClassA
这些并不重要,因为它们已经成为过去,只是为历史而保留。所以,正因为如此,我创建了这个领域lastClassA
每次有新内容时都会更新ClassA
创建并保存在磁盘上。
我还可以创建一个 JPQL 来从classAList
场(演示如下),但我不确定这是最好的方法。那么,有人知道在不加载整个列表并选择列表的最后一个成员的情况下获取最后一条记录的策略吗?
Select a from ClassA a where a.startDate = (Select MAX(b.startDate) from ClassA b where ClassB.id=:classBId)
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)