2011-08-31 2 views
1

StatelessSession을 사용하여 엔티티를 일괄 업데이트하려고합니다.엔티티를 업데이트하고 NHibernate StatelessSession을 사용할 때 하위 프록시를 무시합니다.

왜냐하면 상태가 없기 때문에 NHibernate는 저장시 하위 엔티티를 자동 캐스케이드하지 않습니다.

하위 엔티티 중 일부를 변경하고 싶지 않으므로 괜찮습니다.

저장해, NHibernate에 불평에 불행하게도 :

"객체가 저장되지 않은 과도 인스턴스를 참조 - 세척하기 전에 transient 인스턴스를 저장 유형 : Castle.Proxies.MyRandomEntityProxy : MyAssembly.MyRandomEntity, 엔티티."의

을 나는 시도하고 자식 개체를 업데이트 할 경우 물론,이 오류가 발생합니다 :

"아니 persister을 위해 : Castle.Proxies.MyRandomEntityProxy"

당신이 볼 수 있듯이

가 자식 엔티티가 프록시 becau 그것은 적재되지 않았다. 나는 그것을 필요로하지 않는다, 나는 그것을 최신의 것으로하고 싶지 않다. .. 그러나 비록 내가해도 나는 할 수 있었다.

이 아이디어를 어떻게 해결할 것인가? 기본적으로 일시적인 하위 엔티티를 무시하도록 말하고 있습니까? 그것의 사용

<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0"> 
    <column name="FlightId" /> 
    <generator class="assigned" /> 
</id> 
+0

왜 프록시가 일시적입니까? 그것을 검색하는 동안 생성 된 경우 저장되지 않은 값의 매핑이 올바르지 않습니다. 그렇지 않으면 누가 그것을 만들고 있습니까? – Firo

+0

검색 할 때 생성해야합니다. 만지지 않습니다. 어떤 방법으로 매핑이 잘못 되었습니까? Fluent Nhibernate를 사용하고 있으며, 해당 하위 엔티티의 매핑과 관련된 특정 작업을 수행하지 않습니다. –

+0

'MyRandomEntity'에 대한 id-mapping은 어떻게 생겼습니까? – Firo

답변

1

:

여기
<many-to-one class="MyAssembly.Flight, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="OutboundFlight"> 
    <column name="OutboundFlightId" /> 
</many-to-one> 

아이 엔티티의 ID 열입니다 : 여기에 업데이트

부모 개체의 자식 개체에 대한 매핑 인스턴스가 영속적인지 또는 일시적인지를 알기 위해 'unsavedvalue'를 사용하는 할당 된 생성자. 어쩌면 실제로 데이터베이스에 id = 0 인 Flight 객체가 있습니까? 그런 다음 Id = 0 인 프록시로 만들어지며 이는 일시적인 인스턴스로 처리됩니다.

+0

좋은 하나, 고마워! –