2011-09-24 6 views
1

일반적으로 Child 개체 (대다수의 경우) 컬렉션을 포함하는 Parent를 저장하는 가장 좋은 방법은 궁금하지만 부모의 컬렉션은 현재 로드되지 않았기 때문에 null입니까?부모 개체를 저장하는 가장 좋은 방법

필자의 경우 부모는 웹 페이지에서 내 서비스 계층으로 전달됩니다. 웹 페이지는 양식의 상위 특성 만 채 웁니다.

데이터베이스의 부모에 연결된 여러 자식 개체가 있지만 'children'속성이 현재 null임을 알고 있습니다.

부모님을 저장하면 부모님을 저장하면 자녀들이 cascade = "none"으로 설정되어 있어도 모든 링크가 삭제됩니다. 삭제 기록은 로그에서 Hibernate 문제를 볼 수 있습니다.

나는이 해결하기 위해 여러 가지 방법을 생각할 수

:)

1을 별도로 아이를로드 한 다음에 부모의 자식 수집을 설정 한 다음 부모 (작품을 저장하지만,이 데이터베이스에 추가 여행입니다) .

2) HQL 또는 Native SQL을 사용하는 간단한 속성에 대해서만 업데이트를 실행하십시오.

업데이트 : 캐스케이드 동작이 실제로 제대로 작동하는지 잘 모르겠습니다. 워드 프로세서에서, 그것은 NHibernate에이 폭포가 업데이트를 저장 내 컬렉션 엉망을 설정하지 않는 한 제안 등 모든 고아 삭제하지만이 (Order.hbm.xml에서) 내 매핑

입니다
<bag name="OrderItems" table="order_item" cascade="none" lazy="true"> 
    <key column ="order_id" /> 
    <many-to-many class="MenuItem" column="item_id"/> 
</bag> 

Order.OrderItems가 null이고 SaveOrUpdate (Order)를 사용하여 Order 개체를 저장할 때 컬렉션을 확실히 삭제합니다. 나는 그들이 보존되기를 바란다. 구성이 잘못 되었나요?

감사

답변

1

실제로 서비스 계층에 UI에서 데이터를 전달하는 실제 부모 개체를 사용하지 않을 것입니다. 대신에 기본 속성 만 포함하는 경량 클래스 (Data transfer object)를 구현 한 다음이를 서비스 계층에 전달하고 부모 속성을 수동으로 또는 AutoMapper을 사용하여 채 웁니다.

+0

답장을 보내 주셔서 감사합니다. 솔직히 말해서 나는 생각할 도메인 객체의 집합을 하나만 가지기를 원했지만 고려해 보았습니다. 필자는 DTO 유지 관리가 유지해야 할 악몽이 된 대규모 프로젝트 (Java)에서 작업했습니다 (엔티티와 동기화 상태 유지). 현재, 나는 그 문제에 대해서 신경 쓰는 객체 만 건드리는 HQL update 'query'를 사용하여 문제를 해결했다. 그것은 내가 뭘 원하는지 NHibernate에 깃발이 있어야한다고 확신하지만 여전히 아주 청초하다. 다시 한 번 감사드립니다. – Richard

+0

DTO를 어디에서나 사용하는 것은 필수적이지는 않지만, 가장 이해하기 쉬운 부분입니다. –

관련 문제