这个错误,出现在一对多关系对应中,一的一端配置了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对象