2010-05-10 6 views
0

Hibernate를 가진 자식 객체를 업데이트하는 올바른 방법은 무엇입니까? 부모 객체를 "깨우지"않아도됩니다. 부모 개체가 크거나 시작 비용이 비싸기 때문에이 문제를 피하려고합니다.Hibernate/ORM - 웹 업데이트 된 자식 업데이트

클래스를 작성자 (상위) 및 도서 (하위)라고 가정합니다. (아직도, 저자를 인스턴스화하는 것을 피하려고 노력한다)

책은 XML로서 웹 서비스를 통해 다시 온다. 다시 역 직렬화되어 CLR 개체가됩니다. Book에는이 문제를 허용하는 AuthorId 속성이 있습니다. 하지만 Author 속성도 있습니다.

SaveOrUpdate() Book을 시도하면 객체가 직렬화 될 때 Author가 null이므로 데이터베이스의 author_id가 지워집니다. 이것은 일반적인 문제 일 것 같습니다. 해결 방법은 무엇입니까?

또한 Author를 인스턴스화하고 Books 속성이있는 경우입니다. 업데이트하려는 책은 이미이 책 중 하나입니다 (목록 < 도서 >). "동일한 식별자 값을 가진 다른 객체가 이미 세션과 관련되어 있습니다"문제가 발생했습니다. 웹 서비스를 통해 자녀를 업데이트하는 표준 프로세스는 무엇입니까? 먼저

답변

1

, 당신의 지속적인 Book 엔티티 Author 참조 아닌 AuthorId이 있어야합니다. DTOAuthorId이 아니고 Author이 아닌 서비스에 사용해야합니다.

는 그 후, 코드는 간단

using (var tx = session.BeginTransaction()) 
{ 
    var book = session.Get<Book>(bookDTO.Id); 
    MapAllSimplePropertiesFromDTO(bookDTO, book); 
    book.Author = session.Load<Author>(bookDTO.AuthorId); 
    tx.Commit(); 
} 

session.Load<Author> 데이터베이스로 이동하지 않고 ID로 Author에 프록시 참조를 생성한다.

+0

나는 내가 아직 얻지 못했던 NHibernate 참조에 또 다른 레이어가 있다는 것을 알았다. 다시 궤도에 진입했다고 생각해. 감사합니다 (+1 및 답변) – BuddyJoe

관련 문제