deleted entity passed to persist

来源:互联网 发布:凡人修仙传优化 编辑:程序博客网 时间:2024/06/10 01:40

这个错误,出现在一对多关系对应中,一的一端配置了Cascade.PERSIST属性(ALL当然也包括),如下面的两个类: 

public class ModuleOp{private Long id;@OneToMany(mappedBy = "module", cascade=CascadeType.ALL, fetch=FetchType.EAGER) public List<ModuleOp> getOps() {  return ops; }public class ModuleOp{private Long id;@ManyToOne@JoinColumn(name="module_id")public Module getModule() {return module;}}

在删除的时候,要进行如下操作。

public String remove() {try {ModuleOp op = service.getOne(id);op.getModule().removeOp(op);service.delete(id);addActionMessage("删除成功");} catch (Exception e) {logger.error(e.getMessage(), e);addActionMessage("删除成功");}return RELOAD;}

注:service是自定义的中间类,其getOne和delete执行的是Spring data对应的操作函数。
 

参考文档:http://stenlylee.iteye.com/blog/317161

该错误很可能出现在如下情况:

Role和Permission为两个对象,分别对应数据库中的两个表,关系是一对多

Permission里面有hibernate映射对象permissionInstance.role

PERMISSION表中有外键关联到ROLE表的主键

javax.persistence.EntityNotFoundException: deleted entity passed to persist: [com.yourcompany.projectName.entity.Permission#<null>]

当删除permissionInstance的时候,报如题错误

通过一个笨办法解决这个问题,类似如下代码:

permissionInstance.getRole.getPermissions.remove(permissionInstance);

permissionInstance:要删除的对象

permissionInstance.getRole:获得permissionInstance所属的Role对象

getPermissions:获得Role对象的一对多关联对象collection(我习惯用List)

remove(permissionInstance):用List对象的remove方法删除permissionInstance

最后再通过delete或者remove删掉permissionInstance对象

 

原创粉丝点击