`
streammoon
  • 浏览: 24700 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java.lang.IllegalArgumentException: Removing a detached instance

 
阅读更多
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状态了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics