두 번째 얻기 위해 저장Hibernate는 시퀀스에게 나는이 같은 클래스가
public class A{
private B b;
private C c;
}
내가이 개체를 만드는거야 및 (getter와 setter로를, 모든 오라클 DB에 대한 순서로, 각각 최대 절전 모드로 매핑) 그것을 데이터베이스에 저장합니다.
그래서에는 객체를 생성하고 B 객체를 채우고
saveOrUpdate(a)
그래서 난 생성 "A"와 "B"시퀀스를 가질 수 부른다. 그런 다음 계산을하고 "C"의 인스턴스를 만들고 "a"로 설정합니다.
여기까지 모든 것이 잘 작동합니다. 나는 이제 "c"의 이드를 얻을 필요가있어서 플러쉬하고 커밋하기 전에 몇 가지 검사를합니다.
하지만 객체가 더 이상 일시적이 아니기 때문에 saveOrUpdate가 작동하지 않습니다. saveOrUpdate에 대한 hibernate 문서에 따르면 : "객체가이 세션에서 이미 영속적이면 아무 것도하지 말 것"
아이디어가 있습니까?
속성 C가 가지고있는 감지 최대 절전 모드보다 (너무 길고 지저분이기 때문에 코드를 게시하지만, 기본적으로 그의 수) C가 최대 절전 모드 매핑 클래스이며, 때에 프로퍼티가 올바르게 매핑되는 경우
오른쪽. 하지만 플러시하고 커밋하기 전에 C의 ID가 필요합니다. 두 번째로 "a"에 saveOrUpdate를 호출하는 것은 아무 일도하지 않습니다. "a"가 이미이 세션에서 영속적으로 유지 되었기 때문에 변경되지 않았는지 확인하기도합니다 (DB 제약 조건 때문에 수행 할 수 없습니다.). 쿼리의 id와 url을 만들고 다른 필드에있는 텍스트에 넣으려면 c의 Id가 필요합니다. –
wll, 당신은 saveOrUpdate (c) 호출을 만들어야하기 때문에, hibernate는 당신의 텍스트 필드에 사용할 수있는 id를 할당 할 것이다. 필드가 c의 속성 인 경우 최대 절전 모드로 올바르게 보존됩니다. – Salandur