powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Create Spring Transaction in JUnit test
3 сообщений из 3, страница 1 из 1
Create Spring Transaction in JUnit test
    #38578395
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять следующее. Есть тест на создание сущности:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Test
    public void createEntity() {
        final Author author = new Author(null, "FirstName", "MiddleName", "SecondName");
        TransactionTemplate transactionTemplate = new TransactionTemplate(manager);
        transactionTemplate.execute(new TransactionCallback<Object>() {
            @Override
            public Object doInTransaction(TransactionStatus transactionStatus) {
                aDo.saveOrMergeEntity(author);
                return null;
            }
        });      

        TypedQuery<Author> query = entityManager.createQuery("SELECT a FROM Author a WHERE a.firstName=:firstName AND a.middleName=:middleName AND a.secondName=:secondName", Author.class);
        query.setParameter("firstName", "FirstName").setParameter("middleName", "MiddleName").setParameter("secondName", "SecondName");
        Author authorEntity = query.getSingleResult();
        assertNotNull(authorEntity);
    }



Он проходит, все нормально. Если я попытаюсь сделать так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Test
    public void createEntity() {
        final Author author = new Author(null, "FirstName", "MiddleName", "SecondName");
       entityManager.getTransaction().begin();
       aDo.saveOrMergeEntity(author);
       entityManager.getTransaction().commit();

        TypedQuery<Author> query = entityManager.createQuery("SELECT a FROM Author a WHERE a.firstName=:firstName AND a.middleName=:middleName AND a.secondName=:secondName", Author.class);
        query.setParameter("firstName", "FirstName").setParameter("middleName", "MiddleName").setParameter("secondName", "SecondName");
        Author authorEntity = query.getSingleResult();
        assertNotNull(authorEntity);
    }


вылетает Exception: java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT там где я пытаюсь открыть транзакцию.
Вычитал, что LocalContainerEntityManagerFactoryBean создает thread-safe entityManager. Хотя все равно непонятно, каким образом оно все пересекается в данном случае. Сделал еще так: аннотировал метод @Transactional и убрал открытие и закрытие транзакции, чтобы все делал Spring. Теперь тест вроде бы как и проходит, но после теста запускается ResourceDataBasePopulator, который дропает схему. И теперь на месте где необходимо удалить CONSTRAINT. все просто зависает. Кому не сложно, объясните пожалуйста в чем может быть дело(1 - почему я не могу открыть свою транзакцию, 2 - почему в тестах не катируется @Transactional (вроде бы как)). Да и еще забыл добавить, что класс аннотирован @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/test-context.xml"})
...
Рейтинг: 0 / 0
Create Spring Transaction in JUnit test
    #38579624
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного сам въехал. Значит Spring сам контролирует создание и коммит всех транзакций. Все что нужно было, так это указать DefaultRollback = true для всех тестов, убрать ResourceDataBasePopulator и указать @Transactional для класса.
...
Рейтинг: 0 / 0
Create Spring Transaction in JUnit test
    #38579627
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка, DefaultRollback указывать необязательно. True по-умолчанию. Оказывается, после каждого теста, контейнер сам делает Rollback и возвращает базу в первоначальное состояние
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Create Spring Transaction in JUnit test
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]