hibernate - Grails:如何区分一项交易与另一项交易?

标签 hibernate grails transactions gorm

执行一行代码和另一行代码,我如何确定它们是在同一个休眠事务中执行还是在不同的休眠事务中执行?在调查硬错误时,拥有当前交易的唯一ID将是一个有用的功能。

我尝试将TransactionStatus强制转换为具有方法DefaultTransactionStatus的实现getTransaction(),但导致三个HibernateTransactionObject具有不同的hashCode……无济于事。

在下面的示例中,我想使用status1 ne status2status2 eq status3这样的表达式。但是equals()总是返回falseTransactionStatusHibernateTransactionObject:

Dog.withTransaction { TransactionStatus status1 ->
    Dog.withNewTransaction { TransactionStatus status2 ->
        Dog.withTransaction { TransactionStatus status3 ->
            print(status1)
            print(status2)
            print(status3)
        }
    }
}

输出:
org.springframework.transaction.support.DefaultTransactionStatus@d42932c / org.springframework.orm.hibernate3.HibernateTransactionManager$HibernateTransactionObject@3f02d1d0
org.springframework.transaction.support.DefaultTransactionStatus@598b083a / org.springframework.orm.hibernate3.HibernateTransactionManager$HibernateTransactionObject@dcc3481
org.springframework.transaction.support.DefaultTransactionStatus@5803214e / org.springframework.orm.hibernate3.HibernateTransactionManager$HibernateTransactionObject@36c945c3

Grails 2.2.0,Hibernate 3.6

最佳答案

还有另一种方法,只发送带有您想要的名称的TransactionDefinition。

public void updateStatusSomething(somethingToUpdate, anotherThingToUpdate) {
    def transactionDefinition = new DefaultTransactionDefinition()
    transactionDefinition.setName("MY TRANSACTION NAME")
    Domain.withTransaction(transactionDefinition) {
        updateSomething(somethingToUpdate)
        updateAnotherThing(anotherThingToUpdate)
    }
}

如果将其添加到log4j Config.groovy
trace 'org.codehaus.groovy.grails.orm.hibernate.GrailsHibernateTransactionManager'

在您的日志中,您将看到以下内容:

2015/07/08 11:55:05 [hibernate.GrailsHibernateTransactionManager] Creating new transaction with name [MY TRANSACTION NAME]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT



希望对您有所帮助,这是一个很好的建议,建议您在实际需要时进行跟踪或调试,以进行测试。

关于hibernate - Grails:如何区分一项交易与另一项交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18215385/

相关文章:

java - Spring 数据 : How to set GenerationType strategy while working with @Embeddable and @Embedded

java - Hibernate删除user和user_type而不是只删除user

hibernate - 使用 hbm2ddl 创建 ID 和数据库方案的共享序列生成器

chalice 3 : gradle-clover-plugin integration

hibernate - Gorm返回值类型

spring - @PostConstruct 方法上的 @Transactional

hibernate - 我怎样才能使带有 IN 的命名查询真正起作用?

jquery - Grails动态更新模板 View 而无需Ajax

java - Spring 交易: Method with requires_new called from a method with requires

php - PDO 事务 : What happens to another script