1

我有一个具有 int 主键的实体 LearningUnit。实际上,它没有更多的东西。

Entity Concept 与其有如下关系: @ManyToOne @Size(min=1,max=7) private LearningUnit learningUnit;

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

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

如果有的话,请指出我上面概述的算法中的明显缺陷。

4

1 回答 1

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
    // ...
}

如果有的话,请指出我上面概述的算法中的明显缺陷。

实际上,我不会将该逻辑放在您的实体的构造函数中(您通常无法访问实体管理器,这不是一件坏事)。我会在服务方法中实现这个逻辑(它属于它,因为我认为它是业务逻辑)。

作为旁注,我认为@Size约束应该在关联的另一边,在Collection.

于 2010-05-20T19:33:53.353 回答