【问题标题】:EM Find behaves differently if Entity removed within same transaction如果在同一事务中删除实体,EM Find 的行为会有所不同
【发布时间】:2013-01-16 03:03:05
【问题描述】:

似乎Hibernate EntityManager find 方法在以下两种情况下的行为有所不同:

案例 1 - 事务开始前数据库中不存在实体。在事务中,实体的find返回null

案例 2 - 实体在事务之前存在于数据库中。在事务中,实体是remove'd,然后相同键的find 抛出EntityNotFoundException

这是预期的行为吗?我需要在find 之前执行flush 以使其表现相同吗?

【问题讨论】:

    标签: java hibernate entitymanager


    【解决方案1】:

    当没有找到实体时,EntityManager 中的 find 方法会抛出 EntityNotFoundException 是出乎意料的。 Documentation很清楚:

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

    此错误已在HHH-7861 中报告。它在 4.1.10 中修复,尚未发布。

    【讨论】:

    • 谢谢。在某个时候我们会升级,这对我们来说将不再是问题。
    【解决方案2】:

    好的,回答我问题的第二部分,似乎removefind 之间的flush 在情况2 使它的行为与情况1 相同。也就是说,find 只是返回null 而不抛出异常(这是我们想要的,因为异常会触发回滚)。

    任何能告诉我为什么find应该表现不同的人都会得到答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2021-09-07
      相关资源
      最近更新 更多