2013-05-04 3 views
2

JPA를 사용하여 기본 Java 프로젝트 설정이 있습니다. 내가 올바르게 주석을 추가하고 아무 문제없이 내 PostgreSQL 데이터베이스에 데이터를 삽입 할 수있는 클래스가 있습니다.EntityManager remove() 호출로 데이터베이스가 업데이트되지 않습니다.

내 질문 ... 내가

내가 "em.remove (즉, myObject)"을 호출하고있어인가요 ... 내가 여기에 자세한 내용을 추가 할 필요가 있음을 알 수 있습니다 '그들'은 EntityManager를입니다. 디버깅 할 때 개체에 대한 변경 사항을 볼 수 있지만 응용 프로그램이 완료되면 변경 내용이 데이터베이스에 반영되지 않습니다.

.remove() 호출로 데이터베이스가 업데이트되거나 .flush() 호출을 추가해야합니까? 나는 이것에 인터넷 검색을 시도하고 뭔가를 놓치고 있어야합니다.

감사합니다.

+0

데이터베이스를 제거하기 전에 동일한 트랜잭션으로 데이터베이스에서 개체를 읽으십니까? – clav

+0

예, 동일한 트랜잭션의 일부입니다. –

+2

분리 된 인스턴스가 아닌 경우 제거 호출이 작동해야합니다. 분리 된 경우 먼저'Object managed = em.merge (myObject);를 사용하여 관리하고'managed'에서 remove를 호출해야합니다. – clav

답변

0

캐스케이드 유형을 정의해야한다는 사실을 알았습니다.

@ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "QUESTION_ID", nullable = false) 
    private Question question; 
+0

제거시 관련 Question 객체를 제거하려는 경우에만 캐스케이드를 추가해야합니다. 캐스케이드 .REMOVE는 myObject의 remove가 Question 객체에서도 실행됨을 의미합니다. –

0

remove 호출은 데이터베이스에서 엔티티를 제거해야합니다. 그러나 캐싱 설정에 따라 이것은 즉시 발생하지 않을 수도 있습니다. 제거로 인해 위반되는 제약 조건이있는 경우 데이터베이스를 업데이트하려고 시도하면 예외가 발생하고 제거가 실패합니다. 즉시 발생했거나 즉시 실패 할 것이라는 것을 정말로 보장해야한다면, 예, flush으로 전화해야합니다.

관련 문제