java - 在 Spring 类中获取 Hibernate 事务

标签 java database hibernate spring

我正在开发一个使用 Spring 并使用 TransactionInterceptor 透明地获取 Hibernate 事务的程序。这使得说“当从某个其他类调用此方法时,将其包装在一个事务中(如果它尚未在一个事务中)”变得非常方便。

但是,我有一个类需要尝试写入并且必须立即查明它是否成功。虽然无论如何我都想要两种方法,但我希望有一种方法可以将它们放在同一个类中,而无需在程序上显式创建事务。实际上,我想要这样的东西:

public void methodOne() {
    //..do some stuff
    try  {
       transactionalMethod();//won't do what I want
    } catch(OptimisticLockingFailure e) {
      //..recover
    }
}

@Transactional
public void transactionalMethod() {
    //...do some stuff to database
}

不幸的是,据我所知,这是行不通的,因为我只是直接调用 transactionalMethod。有没有办法让 Spring 为我调用一个本地方法,并在需要时将其包装在一个事务中,或者它是否必须在我连接到这个类的另一个类中?

最佳答案

定义一个类实现的接口(interface),它执行transactionalMethod();使用依赖注入(inject)将类的值设置为它自己的实现;在您的 bean 工厂中,允许 Spring 围绕该接口(interface)实现插入一个 Around 方面。这应该可以满足您的需求。

关于java - 在 Spring 类中获取 Hibernate 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826442/

相关文章:

java - Spring Boot 从服务调用 Rest Controller 方法

database - 在关系数据库中查找 "1-to-3"链接

database - 数据模型之间的差异

php - 插入错误编码后更新MySQL数据库中的数据

java - 使用@IdClass 复合主键时如何命名@ForeignKey?

spring - JsonMappingException : Can not construct instance of

java - hibernate 不读取 ehcache.xml 或不超时?

java - ConcurrentHashMap 返回一个弱一致性迭代器,我们为什么要使用它呢?

java - 如何通过 XMLDB 嵌入的 java API 验证 eXist-db 2.2 中的密码?

java - 如何从 Swagger UI 中删除 Controller 列表