Java 如果在同一事务中删除实体,则EM Find的行为不同
在以下两种情况下,Hibernate EntityManagerJava 如果在同一事务中删除实体,则EM Find的行为不同,java,hibernate,entitymanager,Java,Hibernate,Entitymanager,在以下两种情况下,Hibernate EntityManagerfind方法的行为似乎有所不同: 案例1-在事务开始之前,数据库中不存在实体。在事务中,实体的find返回null 案例2-交易前数据库中存在实体。在事务中,实体是remove'd,然后相同键的find抛出EntityNotFoundException 这是预期的行为吗?在查找之前,我是否需要执行刷新,使其行为相同?好的,回答我问题的第二部分,在案例2中,在删除和查找之间执行刷新,使其行为与案例1相同。也就是说,find只返回nul
find
方法的行为似乎有所不同:
案例1-在事务开始之前,数据库中不存在实体。在事务中,实体的find
返回null
案例2-交易前数据库中存在实体。在事务中,实体是remove
'd,然后相同键的find
抛出EntityNotFoundException
这是预期的行为吗?在查找之前,我是否需要执行刷新,使其行为相同?好的,回答我问题的第二部分,在案例2中,在删除和查找之间执行刷新,使其行为与案例1相同。也就是说,
find
只返回null
,而不抛出异常(这是我们想要的,因为异常会触发回滚)
任何人都可以告诉我为什么
find
应该有不同的行为。当找不到实体时,EntityManager
中的find
方法会抛出EntityNotFoundException
,这是出乎意料的。很清楚:
返回:找到的实体实例,如果实体不存在,则为null
此错误在中报告。它已在4.1.10中修复,尚未发布。谢谢。在某个时候,我们将升级,这将不再是我们的问题。