EntityManager 删除数据时出现
java.lang.IllegalArgumentException: Removing a detached instance com.txl.app.beans.UserInfo#8
at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:86)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
在方法上添加
@Transactional
这个方法要求是查询所在的地方。
如 我是在某service类添加
@Transactional
public void deleteUser(String id){
if(null!=id&&!"".equals(id)){
UserInfo u = dao.findUser(Integer.parseInt(id));
dao.deleteUser(u);
}
dao层只有一句:
public void deleteUser(UserInfo u){
super.remove(u);
}
remove()是在dao的父类:
public void remove(T o){
this.getEntityManager().remove(o);
}
如果查询的方法和删除的不在同一个方法内 ,即使加上@Transactional
也会出现错误。原因是该对象(新查询的)已经成为detached状态了。
java.lang.IllegalArgumentException: Removing a detached instance com.txl.app.beans.UserInfo#8
at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:86)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
在方法上添加
@Transactional
这个方法要求是查询所在的地方。
如 我是在某service类添加
@Transactional
public void deleteUser(String id){
if(null!=id&&!"".equals(id)){
UserInfo u = dao.findUser(Integer.parseInt(id));
dao.deleteUser(u);
}
dao层只有一句:
public void deleteUser(UserInfo u){
super.remove(u);
}
remove()是在dao的父类:
public void remove(T o){
this.getEntityManager().remove(o);
}
如果查询的方法和删除的不在同一个方法内 ,即使加上@Transactional
也会出现错误。原因是该对象(新查询的)已经成为detached状态了。