2012-03-28 4 views
0

EclipseLink를 사용하여 테이블의 열을 어떻게 업데이트 할 수 있는지 궁금합니다. EntityManager.merge(myObject);을 사용해 보았지만 EclipseLink는 다른 열을 null 값으로 업데이트 할 수 없다는 몇 가지 예외를 던졌습니다. @ChangeTracking 속성을 업데이트하려고하는 클래스에 추가하려고 했으므로 변경된 열을 업데이트하기 만했으나 제대로 작동하지 않았고 올바른 방법인지 알지 못합니다.EclipseLink를 사용하여 MySQL에서 테이블의 열을 어떻게 업데이트합니까?

그래서 EclipseLink를 사용하여 테이블에서 단 하나의 컬럼 만 업데이트 할 수 있습니까?

답변

1

병합이 작동하지 않으면 처음부터 새 인스턴스를 만들고 변경하려는 값을 채우려 고 시도하기 때문일 수 있습니다. 이 결과 병합하여 다른 모든 필드를 Null로 덮어 씁니다. 모든 JPA 관리 필드를 병합하기 때문에 불완전 엔티티에 em.merge를 사용하지 마십시오. 원하는 내용을 알 수 없으며 엔티티의 전체 상태를 병합해야합니다.

대신 변경 사항을 사용하여 관리되는 인스턴스를 수정하십시오. 간단한 예제 :

em.getTransaction().begin(); 
YourEntity instance = em.find(YourEntity.class, id); 
instance.setYourAttribute(newValue); 
em.getTransaction().commit(); 

나중에 분리형 인스턴스를 사용하여 나중에 em.merge를 사용합니다.

+0

고마워요! 그게 효과가 있었어! @ChangeTracking은 어떨까요? 그게 무엇이고 언제 사용합니까? – Rox

관련 문제