nep*_*une 51 jpa entitymanager illegalargumentexception sql-delete
我有一个使用JPA(transaction-type ="JTA")的java EE项目,hibernate作为提供者.我写我的bean来处理CRUD的事情.该程序在JBOSS 7 AS中运行.
我有一个EntityManagerDAO:
@Stateful
public class EntityManagerDao implements Serializable {
@PersistenceContext(unitName = "dtdJpa")
private EntityManager entityManager;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Object updateObject(Object object) {
object = entityManager.merge(object);
return object;
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void createObject(Object object) {
entityManager.persist(object);
}
public void refresh(Object object) {
entityManager.refresh(object);
}
public <T> T find(Class<T> clazz, Long id) {
return entityManager.find(clazz, id);
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void deleteObject(Object object) {
entityManager.remove(object);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用时deleteObject
,会出现这个异常.
java.lang.IllegalArgumentException:删除分离的实例com.test.User#5
这是怎么造成的,我该如何解决?
Bal*_*usC 195
EntityManager#remove()
仅适用于在当前事务/上下文中管理的实体.在您的情况下,您在先前的事务中检索实体,将其存储在HTTP会话中,然后尝试在不同的事务/上下文中删除它.这不行.
您需要检查实体是否由管理EntityManager#contains()
,如果没有,则进行管理EntityManager#merge()
.
基本上,delete()
您的业务服务类的方法应如下所示:
em.remove(em.contains(entity) ? entity : em.merge(entity));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
72436 次 |
最近记录: |