如果在同一事务中删除实体,则EM查找的行为会有所不同

时间:2013-01-16 03:03:06

标签: java hibernate entitymanager

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

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

案例2 - 事务在DB之前存在实体。在交易中,实体为remove'd,然后相同键的find会引发EntityNotFoundException

这是预期的行为吗?我需要在flush之前find执行相同操作吗?

2 个答案:

答案 0 :(得分:1)

find EntityManager方法在未找到实体时抛出EntityNotFoundException,这是意料之外的。 Documentation非常明确:

  

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

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

答案 1 :(得分:0)

好的,回答我的问题的第二部分,似乎案例2中flushremove之间的find使其行为与案例1相同。这是,find只返回null而不抛出异常(这是我们想要的,因为异常触发了回滚)。

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