2011-12-11 2 views
2

나는 Hibernate 3.6.4와 MySQL을 가지고 일하고있다.
4 개의 열과 3 개의 다른 열에 고유 한 제약 조건이있는 테이블이 있습니다. UI 응용 프로그램이 해당 객체의 새 인스턴스를 만들면 이미 테이블에있는 값을 가진 네 가지 속성을 사용하여 UI 응용 프로그램을 만들 수 있습니다. 저장시 결과는 중복 항목의 JDBC 예외입니다.고유 제약 조건과 최대 절전 모드

Hibernate에게 새로운 엔트리를 삽입하지 말고 나머지 세 컬럼을 업데이트하거나 저장할 때마다 DB를 수동으로 쿼리하여 존재하는지 확인하고 그에 따라 업데이트 할 필요가 있는지 방법이 있습니까?

감사합니다.

답변

2

이 문제에 대한 접근 방식은 먼저 해당 인스턴스가 있는지 여부와 해당 인스턴스에 따라 응용 프로그램 논리에서 삽입 또는 업데이트를 확인하는 것입니다.

그렇다면 here에 설명 된 MySQL INSERT ... ON DUPLICATE KEY UPDATE 기능을 활용하는 방법이있을 수 있습니다. 이 경우 this related question에 설명 된 것과 같이 엔터티에 대한 사용자 지정 SQL INSERT 문을 지정해야합니다. 그러나 이것이 작동하면 엔티티 ID가 생성되는 방식에 따라 다릅니다. 이 문제와 관련하여 this blog article을 살펴보십시오.

일반적으로 영구 인스턴스가 업데이트 될 때 Hibernate 임시 인스턴스가 지속된다고 생각하는 모든 문제를 처리해야합니다. 이는 생성 된 엔티티 ID, 생성 된 엔티티 값, 엔티티 버전, 동시성, 예상 삽입/업데이트 행 수, 2 차 레벨 및 쿼리 캐시 등의 문제 일 수 있습니다.

이렇게 좋은 일이긴하지만 실험을하려면 프로덕션 응용 프로그램에서이 기능을 사용하지 마십시오.

1

4 개의 고유 값을 가진 명시 적으로 엔티티를 가져와야하며 존재하는 경우 업데이트하거나 그렇지 않은 경우 새 값을 만들어야합니다. 그 주위에 방법이 없습니다.

BTW, 이러한 메커니즘을 사용하더라도 두 트랜잭션이 엔티티를 동시에 가져 와서 존재하지 않는다는 것을 알게되고 두 트랜잭션이 모두 새로운 엔티티를 만들려고하면 예외가 발생할 수 있습니다.