java - 如何排除一个方法是@Transactional?

标签 java spring hibernate

在服务层,我们得到了

@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/

相关文章:

java - JPA:具有复合主键的持久实体

java - 如何在 Android 的 xml 中为字符串资源指定空值?

java - 为什么这个 FetchType.LAZY 被忽略并且所有实体都在查询中获取?

java - Spring Config 属性未在某个服务器上填充

java - 如何在不重新部署的情况下更改weblogic中的属性值?

java - org.springframework.context.NoSuchMessageException : No message found under code 'Size.userForm.username' for locale 'en_US'

java - 带 Oracle 的 ZonedDateTime

java - java字符串的效率

java - Spring 事务无法在服务上打开

java - org.hibernate.AnnotationException : A Foreign key refering X from Y has the wrong number of column. 应该是 2