如何找到具有最大主键的实体?

时间:2010-05-20 19:16:51

标签: java database-design jpa database check-constraints

我有一个具有int主键的实体LearningUnit。实际上,它已经没有了。

实体概念与它有以下关系: @ManyToOne     @Size(分= 1,最大值= 7)     私人学习单位学习单位;

在Concept的构造函数中,我需要检索具有最大主键的LearningUnit。如果没有LearningUnit存在,我实例化一个。 然后我将this.learningUnit设置为检索/即时。

最后,我在try-catch块中调用Concept的空构造函数,让entitymanager进行基数检查。如果抛出一个异常(我希望在另一个7个概念引用相同的LearningUnit的情况下有一个异常。在这种情况下,我会使用一个新的更大的主键实例化一个新的LearningUnit。

请在上面列出的算法中指出,如果有任何明显的陷阱。

1 个答案:

答案 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