在服务层,我们得到了
@Service
@Transactional(readOnly = false)
public abstract class GenericService
在存储库层,我们得到了
public abstract class GenericRepository
在service中我们有一个save方法,调用repository的save方法,即
@Override
public void savePersist(T entity) {
getSession().persist(entity);
}
我想要做的就是将对象“实体”保存到 hibernate session 中以供进一步处理,而不需要提交或向数据库中插入任何语句。 但实际发生的是在运行 savePersist() 后保存“实体”。我认为这是因为在服务类上使用了 @Transactional 注释。但是我应该怎么做才能在 session 中保存实体呢?
最佳答案
当你只是想让 Spring 不提交事务时,那么你需要回滚事务。有以下几种方法:
- 抛出运行时异常(在具有
@Transactional
注释的方法内) - 但这有点滥用角色返回机制 - 另一种方法是将事务标记为
readOnly
:@Transactional(readOnly = true)
但这都仅适用于整个 session !
另一种方法是使实体只读:https://docs.jboss.org/hibernate/orm/3.5/reference/de-DE/html/readonly.html#readonly-api
关于java - 如何排除一个方法是@Transactional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28248500/