gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:44:25 25 4
gpt4 key购买 nike

执行一行代码和另一行代码,我如何确定它们是在同一个休眠事务中执行还是在不同的休眠事务中执行?在调查硬错误时,拥有当前交易的唯一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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com