记录一下遇到detached entity passed to persist错误的情况,以及发生原因

原因:

通过@GeneratedValue注解设置了自定义id生成策略,然后要保存的实体id值不为null,通过entityManager.persist(entity)去保存实体

解决方法:

entityManager.merge(entity)去保存实体

我遇到情况:

一个实体有一个@OneToOne关系的关联实体,我给这个实体的关联实体属性设置级联关系为CascadeType.ALL, 但是实体本身是创建的,id为null,而关联实体属性是有id值的;在调用persist保存实体时,就会报错detached entity passed to persist,说明那个关联实体也通过调用persist进行保存了。

我的情况的解决办法:

有两种办法,那个关联实体要么设置id为null,这样是再创建一条记录,要么设置级联关系为CascadeType.MERGE,进行更新保存;

Q.E.D.


我并不是什么都知道,我只是知道我所知道的。