【问题标题】:Spring Data CrudRepository and TransactionsSpring Data CrudRepository 和 Transactions
【发布时间】:2015-06-19 17:43:42
【问题描述】:

我正在尝试在 CrudRepository 接口上实现事务。我是这方面的初学者,我目前的问题是,当收到来自不同客户的大量请求时,我有时会收到重复的请求。 为了避免这种情况,我想在 Spring 中使用 SQL Transactions 及其实现,但我无法让它工作。

这是我尝试过的方法:

@Repository
@EnableTransactionManagement
@Transactional
public interface ApplicationPackageDao extends CrudRepository<ApplicationPackage, Long> {

/**
 * Find if a record exists for this package name ,
 * @param packageName
 * @return
 */
@Transactional
ApplicationPackage findByPackageName(String packageName);

}

但它似乎不起作用。 我尝试在前面调用的 Java 方法中添加 @Transactionnal 注释,但也无法正常工作。

我应该如何处理 CrudRepository 上的事务? 还是我使用了完全错误的东西?

【问题讨论】:

  • 您是否尝试在方法之上使用@Query 注释?例如:@Query("select a from [object] a where UPPER(a.[attr]) like UPPER(?1)")?
  • @chesh 查询注释是否允许我进行事务操作。我的主要问题是 CrudRepository 隐含的方法,例如保存。我想在允许 findByPackageName 之前等待执行保存。

标签: java spring transactions spring-boot


【解决方案1】:

除了 crm86 的回答之外,@Transactional 注释还有一些注释:

  • 在应用程序中注释入口点似乎是最佳实践(例如,您的 Web 控制器方法或计划批处理的主要方法)。通过使用注释属性 TxType,您可以确保位于应用程序更深处的方法中的约束/条件(例如,如果没有运行 trx-context 等,TxType.MANDATORY 会抛出)。

  • @Transactional 注释只有在类作为 Spring bean 加载时才有效(例如,@Component 类级别的注释)。

  • 请记住,只有 RuntimeException 会导致回滚。如果你想要一个导致回滚的检查异常,你必须使用属性 rollbackOn 枚举每个这样的异常。

  • 类级别的注解对该类的所有公共方法都有效。方法级别的注释会覆盖类级别的注释。上面示例中的重复注释(首先在类级别,然后在方法级别)无效。

【讨论】:

    【解决方案2】:

    我的建议:

    使用@Configuration 注解检查你的上下文和配置类。来自documentation

    @EnableTransactionManagement 注解提供等效的 如果您使用基于 Java 的配置,则支持。只需添加 @Configuration 类的注释

    @EnableTransactionManagement 并且只看 对于它们所在的同一应用程序上下文中的 bean 上的 @Transactional 定义在

    然后你可以在你的服务中使用@Transactional,甚至在一个方法中

    希望对你有帮助

    【讨论】:

    • 感谢现在效果更好。实际上,看起来我在其他地方还有另一个问题,但现在我对交易有了更好的理解。非常感谢。
    • @crm86 对于 Spring Boot,不需要为 CrudRepository 扩展 bean 提供显式 java 配置;在那种情况下,这个注解是否仍然需要,或者这不适用(它是否在 Spring Boot 创建 bean 时自动启用?)?
    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 2017-03-14
    • 2015-12-25
    • 1970-01-01
    • 2018-02-04
    • 2016-12-18
    • 2018-08-15
    • 2016-01-29
    相关资源
    最近更新 更多