繁体   English   中英

如何排除@Transactional方法?

[英]How to exclude a method to be @Transactional?

在服务层,我们得到了

@Service
@Transactional(readOnly = false)
public abstract class GenericService

在存储库层,我们得到了

public abstract class GenericRepository

在服务中,我们有一个save方法调用存储库的save方法,即

@Override
   public void savePersist(T entity) {

      getSession().persist(entity);
   }

我要做的就是将对象“实体”保存到休眠会话中以进行进一步处理,而无需在数据库中提交或插入任何插入语句。 但是实际上发生的是在运行savePersist()之后保存“实体”。 我认为这是因为在服务类上使用了@Transactional注释。 但是,我应该怎么做才能在会话中保存实体?

当您只希望Spring不提交事务时,则需要对事务进行角色分配。 有几种方法:

  • 引发运行时异常(在具有@Transactional批注的Method中)-但这有点滥用角色扮演机制
  • 另一种方法是将事务标记为readOnly@Transactional(readOnly = true)

但这两者仅适用于整个会话!

另一种方法是使实体只读: https : //docs.jboss.org/hibernate/orm/3.5/reference/de-DE/html/readonly.html#readonly-api

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM