如何将方法排除为@Transactional?

时间:2015-01-31 05:26:26

标签: java spring hibernate

在服务层,我们得到了

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

在存储库层,我们得到了

public abstract class GenericRepository

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

@Override
   public void savePersist(T entity) {

      getSession().persist(entity);
   }

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

1 个答案:

答案 0 :(得分:2)

如果您只是希望Spring不提交事务,那么您需要对事务进行角色转换。有几种方法:

  • 抛出运行时异常(在具有@Transactional注释的方法中) - 但这有点滥用角色机制
  • 另一种方法是将交易标记为readOnly@Transactional(readOnly = true)

但这只适用于整个会议!

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