Java 如果在同一事务中删除实体,则EM Find的行为不同

Java 如果在同一事务中删除实体,则EM Find的行为不同,java,hibernate,entitymanager,Java,Hibernate,Entitymanager,在以下两种情况下,Hibernate EntityManagerfind方法的行为似乎有所不同: 案例1-在事务开始之前,数据库中不存在实体。在事务中,实体的find返回null 案例2-交易前数据库中存在实体。在事务中,实体是remove'd,然后相同键的find抛出EntityNotFoundException 这是预期的行为吗?在查找之前,我是否需要执行刷新,使其行为相同?好的,回答我问题的第二部分,在案例2中,在删除和查找之间执行刷新,使其行为与案例1相同。也就是说,find只返回nul

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

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

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


这是预期的行为吗?在查找之前,我是否需要执行刷新,使其行为相同?

好的,回答我问题的第二部分,在案例2中,在删除和查找之间执行刷新,使其行为与案例1相同。也就是说,
find
只返回
null
,而不抛出异常(这是我们想要的,因为异常会触发回滚)


任何人都可以告诉我为什么
find
应该有不同的行为。

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

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


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

谢谢。在某个时候,我们将升级,这将不再是我们的问题。