2010-04-04 1 views
1

иногда, Hibernate генерирует исключение:Тестирование Hibernate с JUnit: при тестировании некоторых операций CRUD в моих классах DAO с помощью JUnit 4.5 «сессия закрыта» исключение

org.hibernate.SessionException: Сессия закрыта!

Сессия не закрыта явно, так что происходит?

Благодаря

+0

Каковы ваши тесты? – Bozho

ответ

1

Я использую фрагмент перечисленных ниже, и я не возникнут какие-либо проблемы

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.AnnotationConfiguration; 
import org.junit.*; 

import static org.junit.Assert.assertFalse; 
import static org.junit.Assert.assertTrue; 

public class ComponentsTest { 
    private static SessionFactory sf; 
    private static Session s; 
    private static Transaction tx; 

    @BeforeClass 
    public static void setUp() { 
     sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
    } 

    @AfterClass 
    public static void tearDown() { 
     sf.close(); 
    } 

    @Before 
    public void open() { 
     s = sf.openSession(); 
     tx = s.beginTransaction(); 
    } 

    @After 
    public void close() { 
     tx.commit(); 
     s.close(); 
    } 
    @Test 
    public void testSth(){ 
     // 
    } 
1

Если предположить, что менеджер транзакций будет установлен правильно, следующий код будет держать сеанс открытым:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext*.xml") 
public class SpringTest { 

    @Autowired private MyObjectDao myObjectDao; 

    @Test 
    @Transactional 
    public void test() throws IOException { 
     MyObject object = myObjectDao.find(objectId); 
     object.setProperty("propertyValue"); 
     MyObject savedObject = myObjectDao.save(object); 
     assertEquals(object.getProperty(), savedObject.getProperty()); 
    } 
} 
Смежные вопросы