【发布时间】:2020-04-12 11:11:54
【问题描述】:
我是 spring 和 hibernate 的新用户。 我有一个服务类,由控制器调用。 调用流程是这样的:
- controll调用myService.create方法,然后
- myService.create 调用 myService.persistEnity 方法。
- 在 myService.persistEnity 方法中,有一个将实体持久化到数据库的 dao 对象。
我发现的问题是:
- 如果我将@transactional 注释附加到“myService.create”方法,实体将被保存到数据库中。 然而,
- 如果我将@transactional 注释附加到“myService.persistEnity”方法实体不会保存到数据库中,并且我看不到任何错误消息。
我的问题是:
- 为什么会发生这种情况? (这是因为调用流程吗?即@transactional 必须附加到控制器类调用的服务类的第一个方法才能工作?)
谢谢。
psudo 代码如下:
@org.springframework.stereotype.Service("myService")
public class MyService {
@Autowired
private MyDao dao;
// if the @Transactional is only put here as this, entities will NOT be saved to database.
@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public MyEntity persistEnity(MyEntity toBeSaved) {
MyEntity entity = dao.persistEntity(toBeSaved);
return entity;
}
// if the @Transactional is only put here, entities will be saved to database.
// @Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public ServiceObject create(ServiceObject serviceObject, User user) {
MyEntity entity = convertToEntity(serviceObject);
entity = persistEnity(dao);
return convertTOServiceObject(entity);
}
...
}
【问题讨论】:
标签: java spring hibernate transactions