我有一些具有@ManyToOne和@OneToMany关系的实体,问题是我正在寻找一种方法来从关系的@OneToMany端插入最后一条记录而不加载来自该关系的所有记录list,实际上,我在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
做一些工作时,它只需要最后创建的 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)