2011-09-26 2 views
1

Hibernate가 하나의 엔티티와 모든 열정적 인 일대일 연결을 수동으로 제거하지 않고도 제거 할 수있는 방법이 있습니까? (연결에 cascade = "evict"설정없이).cascade = "evict"가없는 eager associations의 탈퇴

일단 퍼시스턴스 레이어가 만들어지고 작동하면 이러한 종류의 요구 사항이 자주 발생합니다. 이러한 연관성을 위해 이러한 종류의 구성을 추가하는 것에 대해 확신하지 않습니다. 나는 단지 특정한 경우에 축출을 계단식으로 만들고 싶다.

또한 에서 엔티티를 검색하는 방법이 있다면 (해당 열심히 연결)을 세션에 첨부하지 않아도됩니다.

UI 수정 된 엔티티와 현재의 DB 상태간에 비교 논리를 수행하려면이 작업을 수행하고 싶습니다. 비교 논리 후에 UI 수정 된 엔터티는 항상 저장됩니다. 비교의 논리는 열정적 인 일대일 관계와 아무 상관이 없습니다.

답변

2

첫 번째 질문에 대한 답변은 '아니오'입니다.

두 번째 문제에서 엔티티를 세션에 첨부하고 싶지 않은 이유가 없습니다. 왜 어떤 연관을로드하고 싶지 않은지 알 수 있습니다.하지만 이것은 연관성을 열망하는 대신 게으른 것으로 설정하는 목표입니다. 그냥 열심히하지 마십시오. 세션에로드되지 않습니다.

+0

의견을 보내 주셔서 감사합니다. 내가 업데이트 할 때 사용할 엔티티의 다른 인스턴스가 있기 때문에 세션에 연결될 DB에서 가져온 엔티티를 원하지 않습니다. 그리고 나는 열정적 인 one-to-one 연관성을 가지고있다. (그리고 게으른 로딩을 지원하지 않는다.) 어쨌든 첫 번째 질문에 대한 답은 모든 협회를 수동으로 퇴거시켜야한다는 것을 분명히합니다. –

+0

업데이트 대신 병합을 사용하면 모든 것이 정상적으로 작동합니다. –

+0

감사합니다. '병합'합니다. 내가 뭘 생각했는지 모르겠다. –

0

DB에서 직접 비교하고 무언가를 반환하는 새로운 함수를 작성하는 것은 어떻습니까?

내 생각에 적절하다고 생각합니다.

+0

내가 물어 본 질문에 어떻게 도움이되는지 모르겠다. 나는 엔티티'x'와 모든 일대일 연관을 'evict (x)'에 대한 단일 호출로 축출하고, 'cascade = evict'로 전역 적으로 연관을 바꾸지 않고 싶습니다. –

+0

포스트로드는 getX 다음에 호출되는 함수이므로로드 직후에 콜렉션을 제거 할 수 있습니다. – ssedano

+0

그러나'@ Entity' 클래스에 주석을 달지 않아야합니까? 전 세계적으로 그렇게하고 싶지 않습니다. 단지 특별한 경우에하고 싶습니다. –

관련 문제