2017-05-19 11 views
0

,NHibernate에, 변형 한 리프레시 오브젝트 예외 AssertionFailure {null의 식별자} 내가 <code>NHibernate 4</code> 사용

내가 수정 된 개체를 새로 고칠 수 있도록하는 기능을 구현하고 싶습니다. 내 오브젝트 ID와는 hilow 발전기에 의해 발생하기 때문에 일대 ID2 광고

내 협회에서

, 난 새로운 객체 연결을 삽입 할 문자열을 가진 개체, 그래서 ID2 null의 연결을 포함하는 경우 주요 저장 데이터베이스의 객체. 내가 원래 개체를 다시로드 새로 고침이 발생할 때 ID = null과 새로운 객체 (이, 내가 saveOrUpdate. 내가 내 매핑하지만 효과 notFound = ignore을 넣어 문제 일반적으로 확인 없습니다가있을 때

그래서, 나는 assertion failure (null identifier)이 실행할 때.

미리 감사 나에게 해결 내 문제에 대한 방법을 제공하십시오. 내 협회에서

+1

일부 코드로 질문을 수정하십시오, 감사합니다! –

답변

0

을, 나는 새로운 OBJ를 삽입 ect 연관이므로 주 객체를 데이터베이스에 저장할 때 hilow generator에 의해 생성되므로 ID2는 null입니다.

다소 정확도가 낮습니다. hilo 생성기 전략은 개체가 데이터베이스에 삽입되기 전에 ID를 생성합니다. 그것은 Save에, Save 실제로 세션이 플러시 될 때까지 데이터베이스에 엔티티를 삽입하지 않고 수행합니다.

ID가 null 인 경우 세션에서 엔티티를 아직 보존하지 않았기 때문에 가능성이 큽니다. Save을 호출하면 ID가 null이 아니며, 세션을 플러시하지 않았거나 즉시 삽입이 필요한 발전기 전략을 변경 한 경우 엔 엔티티가 아직 데이터베이스에 없을 것입니다 (identity).

이제 데이터베이스에없는 개체를 새로 고치는 것은 어쨌든 저에게 오류로 보입니다. 그런 수술에서 당신은 무엇을 기대합니까?

not-found="ignore"은 존재하지 않는 엔티티의 새로 고침을 처리하기위한 것이 아닙니다. 데이터베이스에 유효하지 않은 외부 키를 무시할 수 있도록 허용합니다.

+0

확인해 주셔서 감사합니다. 로드 후 다른 사용자가 내 객체를 저장했기 때문에 플러시가 내 객체를 나타 내기 때문에 좋은 timeqtamp를 사용하여 데이터베이스에서 주요 객체를 다시로드 할 것으로 예상됩니다. – Christ121212

+0

나는 응용 프로그램을 중지하지만 개체를 ​​새로 고치려하지 않습니다. – Christ121212

+0

나는이 사건에 대한 일반적인 코드를 찾지 못해 내가 실망했다. 낙관주의 거래로 저장하고 타임 스탬프는 오래되었다. – Christ121212