【问题标题】:jpa: how to check if an entity is persisted?jpa:如何检查实体是否持久化?
【发布时间】:2018-03-18 21:14:10
【问题描述】:

JPA 实体:如何检查实体是否已持久化?

  1. 检查身份证:

    实体 ID 可以在持久化之前由用户设置。所以不靠谱。

  2. 检查版本:

    实体不需要版本。

  3. em.contains(实体)

    如果实体被分离,它将返回false。

【问题讨论】:

  • em.find ? (清除 L1/L2 缓存后)
  • "实体 id 可以在持久化之前由用户设置。"。永远不要为用户用户提供设置或更改 ID 的方法。
  • 实体会在事务提交时被持久化..

标签: jpa


【解决方案1】:

您可以在使用@PostPersist 注释的侦听器方法中使用记录器。查看this 了解更多信息

【讨论】:

    【解决方案2】:

    JPA 的 save 方法返回 can nevernull 的持久化实体。

    您可以简单地 null 检查以查找给定实体是否被持久化。

    User user = userRepository.save(new User(FIRSTNAME, LASTNAME));
    if(user != null) {
        //User entity is successfully persisted.
    }
    

    来自docs

    <S extends T> S save(S entity)

    保存给定的实体。使用返回的实例进行进一步操作 因为保存操作可能已经改变了实体实例 完全。

    参数:实体 - 不能为空。

    返回:保存的实体永远不会为空。

    【讨论】:

    • 我们可以从 save() 方法中检查。但是一般给定一个实体,如何在不重新加载的情况下检查它是否已经持久化?
    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 2011-08-04
    • 2013-06-16
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多