我有一个具有int主键的实体LearningUnit。实际上,它已经没有了。
实体概念与它有以下关系: @ManyToOne @Size(分= 1,最大值= 7) 私人学习单位学习单位;
在Concept的构造函数中,我需要检索具有最大主键的LearningUnit。如果没有LearningUnit存在,我实例化一个。 然后我将this.learningUnit设置为检索/即时。
最后,我在try-catch块中调用Concept的空构造函数,让entitymanager进行基数检查。如果抛出一个异常(我希望在另一个7个概念引用相同的LearningUnit的情况下有一个异常。在这种情况下,我会使用一个新的更大的主键实例化一个新的LearningUnit。
请在上面列出的算法中指出,如果有任何明显的陷阱。
答案 0 :(得分:1)
如何找到具有最大主键的实体?
您可以这样做:
try {
Query q = entityManager.createQuery("from LearningUnit unit order by unit.id desc");
q.setMaxResults(1);
LearningUnit unit = (LearningUnit) q.getSingleResult();
// we found a LearningUnit
// ...
} catch (NoResultException e) {
// We didn't find any LearningUnit
// ...
}
请在上面列出的算法中指出,如果有任何明显的陷阱。
实际上,我不会将这个逻辑放在你的Entity的构造函数中(你通常无法访问实体管理器,这不是一件坏事)。我会在服务方法中实现这个逻辑(它属于它,因为我认为它是业务逻辑)。
作为旁注,我认为@Size
约束应位于关联的另一端,Collection
。