当前位置: 代码迷 >> java >> 事务注释在Spring Boot 2.1.3中不起作用
  详细解决方案

事务注释在Spring Boot 2.1.3中不起作用

热度:104   发布时间:2023-07-17 20:12:00.0

@Transactional注释在springboot-hibernate项目中对我不起作用。 我正在使用注释配置,为此,我已经完成了以下配置。 我已经尝试在服务层以及dao层中使用@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

@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();
        }
    }

服务

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

我正在使用Spring Boot 2.1.3并休眠。 我已经按照上面的方法配置了entitymanagerfactory,并使用以下内容来获取会话

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

但是@Transactional无法正常工作

您正在@Transactional方法内打开Session 这是错误的,因为当您将方法注释为事务性方法时,将在单个会话中调用该方法,而无需打开另一个会话。

我有同样的问题,我在类应用程序@EnableTransactionManagement上添加了此批注(proxyTargetClass = true)

这在我班级服务的方法上

@Transactional(rollbackFor = Exception.class)

  相关解决方案