2012-01-31 2 views
1

고정되지 않은 개체 만 저장하려면 최대 절전 모드로 전환해야합니다. 이 객체가 이미 영속화되어 있다면, Hibernate는 아무것도하지 않거나 영속 객체의 id를 찾아야한다. 소스의 equals() 및 hashCode() 메소드는 owerriden이며 정상적으로 작동합니다. 구성이나 미리 삽입 된 수신기를 통해 어떻게 든 할 수 있습니까? 예를 들어 :최대 절전 모드. 고정되지 않은 개체 만 저장

양쪽 요소가 다른 ID의의와 함께 유지됩니다 내 경우에는
session.beginTransaction(); 
ElementToPersist element = new ElementToPersist(); 
element.setName("Element"); 
element.setValue("Value"); 

session.save(element); 
session.getTransaction().commit(); 

session.beginTransaction(); 
ElementToPersist element2 = new ElementToPersist(); 
element2.setName("Element"); 
element2.setValue("Value"); 

session.save(element2); 
session.getTransaction().commit(); 

. 삽입하기 전에이 요소의 존재를 확인하기 위해 최대 절전 모드로 만들 수 있습니까? 당신은 최고의 징계를 보여줄 수 있습니까? 감사합니다.

답변

4

쿼리를 사용하여 데이터베이스에 요소가 있는지 확인하고 존재하지 않는 경우에만 요소를 삽입하십시오. 두 트랜잭션이 동일한 요소를 동시에 검사하고 삽입하는 경우 경쟁 조건이 발생할 수 있으므로 데이터베이스 제약 조건에 의해이를 적용해야합니다.

+0

비정상적인 아키텍처로 인해 불행히도 제약을 추가 할 능력이 없습니다. 다른 객체가이 요소와 다 대일 관계를 갖고 있고 너무 지속되어야하는 경우 어떻게해야합니까? –

+0

글쎄, 이미 데이터베이스에있는 요소 또는 방금 유지 한 요소를 사용하여 ManyToOne 연결을 대소 문자에 따라 초기화합니다. –

+0

그렇다면 "session.createQuery ("ElementTOPersist from o from o =? ")"와 같은 쿼리를 실행 한 다음이 개체를 수동으로 저장해야한다는 의미입니까? –

관련 문제