【问题标题】:Java JPA: Performant check if Entity is already in DBJava JPA:执行检查实体是否已经在数据库中
【发布时间】:2011-06-02 20:44:39
【问题描述】:

使用 JPA 检查实体是否已在数据库中的最佳方法/最佳实践是什么?

我正在编写一个将主机信息添加到数据库的客户端。例如附加的存储 lun、hba 等...

如果我想为主机添加一个 Lun,我必须检查该 lun 是否已经在数据库中。 (Lun 已经可以附加到另一个主机上)。

我看到了两种可能性:

  1. 我选择了 Lun,检查它是否已经在 db 中
  2. 尝试插入 Lun 并检查异常(唯一约束)

有人有这方面的经验吗?

BR,雷内

【问题讨论】:

    标签: java jpa entity


    【解决方案1】:
    entityManager.find(SomeEntity.class, id)
    

    返回: 找到的实体实例,如果实体不存在则为 null

    这将在数据库中进行简单的选择。只需确保您的收藏(如果有)是惰性的。

    【讨论】:

    • 事务 UI 客户端应该没问题(最佳实践)。为了在批量模式下获得更好的性能,尝试创建并捕获(罕见的)“已经存在的异常”会更快。 (其实这取决于实体存在的概率,如果有很多异常,测试实体的存在会更快)。
    • 不知道身份证怎么办?
    • 然后为其他字段创建一个 JPQL 查询。
    • 如果 LUN 有一些独特的信息,那应该是 ID。然后你就会知道 ID。
    • 是的,我现在更改了模型。我使用 WWID 作为 ID。感谢您的帮助。
    【解决方案2】:

    我认为检查唯一约束异常是一种更好的方法。想想每次插入的成本...

    【讨论】:

    • 是的,我就是这么做的。只需持久化实体并以适当的方式处理异常,以便最终通知用户哪些字段无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多