记录一下遇到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.