2010-07-27 4 views
0

NHibernate에서 새롭기 때문에 빠른 수정이 필요합니다.nhibernate에서 id를 변경할 때 StaleStateException이 발생했습니다.

내가 본 코드에는 정통 디자인이 있습니다.

public class Partner 
{ 
    public virtual int Id { get; set;} //note the set is not private 
    public virtual String Name { get; set;} 
} 

및 FluentNhibernate의 Automappings에 매핑되는

Partner는 이드 0 있지만 만들 때 본인은 DB에 지속 플러시 호출 할 때 :

 CurrentSession.SaveOrUpdate(obj); 
     CurrentSession.Flush(); 

가 나는 Unexpected row count: 0; expected: 1 StaleStateException

나는 NHibernate가 Prim을 바꾸는 것을 좋아하지 않기 때문에 그것을 추측하고있다. 아리 키, 이드. 이 경우에는해야합니다. 이 가증 한 일을 성취하도록 NH을 어떻게 구성 할 수 있습니까?

+0

기존 개체를 삭제하고 새 개체를 추가하지 않는 이유는 무엇입니까? – Paco

답변

1

당신은 HQL으로 업데이트를 수행 할 수 있습니다

session.CreateQuery("update Partner set Id = :newId where Id = :oldId") 
     .SetParameter("newId", newId) 
     .SetParameter("oldId", oldId) 
     .ExecuteUpdate(); 

난 당신이 아이디를 업데이트하려고하는 경우 Evict 세션에서 엔티티, 또는이 무 하나를 사용하는 것이 좋습니다.

관련 문제