JPA (트랜잭션 유형 = "JTA")를 사용하는 java EE 프로젝트가 있고 공급자로 최대 절전 모드입니다. CRUD 일을 처리하기 위해 제 콩을 씁니다. JBOSS 7 AS에서 실행되는 프로그램.java.lang.IllegalArgumentException : 분리 된 인스턴스 제거 com.test.User # 5
나는 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);
}
}
을하지만 deleteObject
를 호출 할 때,이 예외가 나온다.
java.lang.IllegalArgumentException가 : detached 인스턴스에 com.test.User # 5
어떻게 이런 일이 발생하고 나는 그것을 어떻게 해결할 수를 제거?
@BalusC em.remove에서 (em.contains (엔터티)? 엔터티 : em.merge (엔터티)); , em (contains (entity))가 false 인 경우 entityToBeRemoved = em.merge (entity), entityToBeRemoved를 제거 하시겠습니까? em.merge (엔터티)에서 반환되는 항목을 제거 하시겠습니까? –
앞서 언급 한 질문의 대답에 따르면 a = em.merge (a); // 첨부 된 엔티티에 a를 병합하고 할당하기 em.remove (a); // 첨부 된 엔티티를 제거하십시오. –
잘 수행되었습니다. 이것은 매우 사실이며 이것은 좋은 것입니다. 해결책 imho. –