gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:42:35 24 4
gpt4 key购买 nike

@Transactional 注释在 springboot-hibernate 项目中对我不起作用。我正在使用注释配置,我已为其完成了以下配置。我尝试过在服务层和 dao 层中的方法和类名上使用 @Transactional ,但没有成功。我认为事务管理器配置存在一些问题,但我无法弄清楚如何在我的应用程序中配置事务管理器。

应用程序属性

#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 和 Hibernate。我已经按照上面配置了entitymanagerfactory并使用以下内容来获取 session

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

但是@Transactional不起作用

最佳答案

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

关于java - 事务注释在 Spring Boot 2.1.3 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54806284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com