Транзакционная аннотация не работает в весенней загрузке 2.1.3 - PullRequest
0 голосов
/ 21 февраля 2019

@Transactional аннотация не работает для меня в проекте спрингбут-спящий.Я использую конфигурацию аннотации, для которой я сделал следующую конфигурацию.Я попытался использовать @Transactional на метод и имя класса в слое обслуживания, а также в слое дао, но не повезло.Я думаю, что есть некоторая проблема с конфигурацией диспетчера транзакций, но я не могу понять, как настроить диспетчер транзакций в моем приложении.

application.properties

#spring configuration
spring.jpa.show-sql = true
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update
#spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext

dao

@Autowired
    private EntityManagerFactory entityManagerFactory;
    @Override
    public void deleteSMS(String id) {
        logger.info("Delete sms details with id :: \"" + id + "\"");
        Session session = null;
        try {
            session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
            SMSDetails smsDetails = session.get(SMSDetails.class, Long.parseLong(id));
            if (smsDetails != null)
                session.delete(smsDetails);
        } catch (Exception e) {
            logger.error("Error occured while deleting the sms with id :: \"" + id + "\" :: " + e.getMessage());
            throw e;
        } finally {
            if (session != null)
                session.close();
        }
    }

service

@Override
    @Transactional
    public void deleteSMS(String id) {
        smsDao.deleteSMS(id);
    }

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

session = entityManagerFactory.unwrap(SessionFactory.class).openSession();

, но @Transactional не работает

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

У меня была такая же проблема, я добавил эту аннотацию в мое приложение класса @EnableTransactionManagement (proxyTargetClass = true)

И это в методе на моем сервисе класса

@ Transactional (rollbackFor = Exception.class)

0 голосов
/ 21 февраля 2019

Вы открываете Session внутри @Transactional метода.Это неправильно, потому что когда вы аннотируете метод как транзакционный, он вызывается внутри одного сеанса, вам не нужно открывать другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...