2010-01-21 4 views
1

NHibernate 세션을 사용하여 개체를 데이터베이스에 유지하는 저장소 클래스가 있습니다. 기본적으로 리포지토리는 명시 적 트랜잭션을 사용하지 않습니다. 즉, 호출자가 관리해야합니다.NHibernate - 질의하기 전에 플러시 하는가?

[Test] 
public void NHibernate_BaseRepositoryProvidesRequiredMethods() 
{    
    using (var unitOfWork = UnitOfWork.Create()) 
    { 
     // test the add method 
     TestRepo.Add(new TestObject() { Id = 1, Name = "Testerson" }); 
     TestRepo.Add(new TestObject() { Id = 2, Name = "Testerson2" }); 
     TestRepo.Add(new TestObject() { Id = 3, Name = "Testerson3" }); 

     // test the getall method 
     var objects = TestRepo.GetAll(); 
     Assert.AreEqual(3, objects.Length); 

     // test the remove method 
     TestRepo.Remove(objects[1]); 
     objects = TestRepo.GetAll(); 
     Assert.AreEqual(2, objects.Length); 

     // test the get method 
     var obj = TestRepo.Get(objects[1].Id); 
     Assert.AreSame(objects[1], obj); 
    } 
} 

문제는 개체 목록이 GetAll 메서드에서 반환하기 때문에 라인

Assert.AreEqual(3, objects.Length); 

가 비어 테스트를 실패입니다 : 내 NHibernate에 배관을 테스트하기 위해 다음과 같은 단위 테스트가 있습니다. 세 객체를 삽입 한 직후 세션을 수동으로 플러시하면 해당 부분이 통과합니다. 나는 세션에서 기본 FlushMode를 사용하고 있으며 설명서에 따르면 모든 객체를 검색하기 위해 쿼리를 실행하기 전에 플러시해야한다고 명시되어 있지만 분명히 아닙니다. 내가 누락 된 것?

편집 : 단위 테스트 시나리오에서 Sqlite를 사용하고 있습니다. 차이가 있다면.

답변

3

당신 상태가

이 문서에 따르면, AUTO 플러시의 모든 개체

그러나 https://www.hibernate.org/hib_docs/v3/api/org/hibernate/FlushMode.html의 문서는 문서 상태에 있음을 검색하는 쿼리를 실행하기 전에 플러시하기로했다

세션이 가끔을 플러시 : 모드 (강조 광산입니다) 쿼리 실행 전에을 입력하여 쿼리가 부실 상태 인 상태를 반환하지 않도록하십시오. 이것은 기본 비우기 모드입니다.

그렇습니다. 선택 항목에 값이 나타날 것으로 예상하기 전에 플러시를 수행하여 값을 저장해야합니다.

관련 문제