Тестирование Hibernate с JUnit: исключение "сессия закрыта" - PullRequest
1 голос
/ 04 апреля 2010

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

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 17 октября 2013

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

@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());
    }
}
1 голос
/ 13 августа 2010

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

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(){
       // 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...