deleted entity passed to persist

13 篇文章 0 订阅

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值