연관 테이블과 cascade = "save-update"를 사용하여 두 엔티티간에 다 대다 관계를 정의했습니다.NHibernate 추가 UPDATE 쿼리 실행
Entity1에는 Entity2 목록이 들어 있으며 반대로 Entity2에는 Entity1 목록이 들어 있습니다. 이 worflow에서 출력 된 SQL은 ...
- 이
- 전화 session.Save Entity1 에 Entity1의 목록에 Entity2 추가 Entity1 및 Entity2 객체를 만들기를 좋아 보인다
-> 삽입 문은 두 엔티티 모두에 대해 실행 된 다음 연관성 테이블에 삽입 된 레코드를 함께 연결합니다. Entity2에 I 처음 전화 session.Save이 목록에 추가하는 경우
그러나, 다음 Entity1에 session.Save 전화 것과 정확히 같은 Entity2의 모든 값을 설정하는 추가 UPDATE 문 실행이 처음에 삽입되었습니다.
아무런 문제가 없지만 성능을 저하시키는 추가 쿼리입니다. inverse 속성을 사용 했었지만 추가 업데이트 문을 제거하지는 않습니다. 현재 양쪽 엔 inverse = "false"가 있습니다. 어떤 엔티티가 저장된 지 상관없이 연관 테이블을 업데이트하기를 원합니다.
아이디어가 있으십니까?
는 세션이 스레드 아니라는 것을 기억하십시오.나는 대부분의 사람들이 aspnet 또는 'session-per-thread'에서 응용 프로그램에서 'Session-per-request'를 사용한다고 생각합니다. –
예, 웹에서 다른 예제를 보면 세션을 관리하기위한 '단위 작업'을 구현해야합니다. 양식이 공개되면 양식 (내 경우에는 리치 클라이언트 응용 프로그램)을 인스턴스화하고 양식이 폐기 될 때 (세션 처분) 닫을 수 있습니다. – John