在以下两种情况下,似乎Hibernate EntityManager find
方法的行为有所不同:
案例1 - 事务开始之前,数据库中不存在实体。在事务中,实体的find
返回null
。
案例2 - 事务在DB之前存在实体。在交易中,实体为remove
'd,然后相同键的find
会引发EntityNotFoundException
。
这是预期的行为吗?我需要在flush
之前find
执行相同操作吗?
答案 0 :(得分:1)
find
EntityManager
方法在未找到实体时抛出EntityNotFoundException
,这是意料之外的。 Documentation非常明确:
<强>返回:强>
找到的实体实例,如果实体不存在,则返回null
HHH-7861报告了此错误。它在4.1.10中修复,尚未发布。
答案 1 :(得分:0)
好的,回答我的问题的第二部分,似乎案例2中flush
和remove
之间的find
使其行为与案例1相同。这是,find
只返回null
而不抛出异常(这是我们想要的,因为异常触发了回滚)。
任何可以告诉我为什么 find
应该表现不同的人都会得到答案。