【发布时间】:2019-09-08 05:09:35
【问题描述】:
我可以在我的 Spring Boot 应用程序中保存一个没有 @Transactional 的实体。我之所以注意到这一点,是因为在将 @Transactional 添加到 EmployeeService.java 中的 save 方法之前,我无法更新实体。
我没有在班级级别注释@Transactional。唯一找到的其他地方是我的服务层中不属于save 方法的方法。我的EmployeeDAO 没有扩展JPARepository。它带有@Repository 注释。我有 spring-boot-starter-data-jpa 作为依赖项。我也不是手动开始或提交事务。
EmployeeRestController.java
@PostMapping("/employees")
public void addEmployee(@RequestBody Employee employee) {
employee.setId(0);
employeeService.save(employee);
}
EmployeeService.java
public void save(Employee employee) {
emplDAO.save(employee);
}
EmployeeDAO.java
@Override
public void save(Employee employee) {
Session currentSession = em.unwrap(Session.class);
currentSession.saveOrUpdate(employee);
}
【问题讨论】:
-
默认情况下
spring.jpa.open-in-view设置为true。大概是这个原因 -
@caco3 这就是确切的原因。谢谢你的澄清。您能否提供更多详细信息来说明为什么会这样?这是我第一次遇到 open-in-view,因为我是 Spring 新手。
-
@caco3 另外,我不知道如何投票或将您的答案标记为正确。
-
你不能,因为它是评论:) 我已经发布了一些相关链接的答案
标签: hibernate spring-boot transactional