Grails 中的 Hibernate Envers
Hibernate Envers in Grails
我想在我的 Grails (v3.0.11) 应用程序中使用 Hibernate Envers。由于 grails envers 插件已经死了,我试着自己做。
我做了什么:
在 build.gradle 中,我添加了 Hibernate Envers 依赖项
compile "org.hibernate:hibernate-envers"
我的域看起来像:
import org.hibernate.envers.Audited
@Audited
class Hotel {
String name
}
在脚手架Controller中,我只改了:
class HotelController {
...
@Transactional
def save(Hotel hotel) {
...
Hotel.withTransaction {
hotel.save flush:true
}
...
}
...
}
保存时出现以下异常:
URI
/hotel/save
Class
org.hibernate.envers.exception.AuditException
Message
null
Caused by
Unable to create revision because of non-active transaction
Line | Method
->> 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 617 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
Caused by HibernateSystemException: Unable to create revision because of non-active transaction; nested exception is org.hibernate.envers.exception.AuditException: Unable to create revision because of non-active transaction
->> 32 | doCall in HotelController.groovy
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute . in grails.transaction.GrailsTransactionTemplate
| 31 | $tt__save in HotelController.groovy
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 617 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
Caused by AuditException: Unable to create revision because of non-active transaction
->> 32 | doCall in HotelController.groovy
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute . in grails.transaction.GrailsTransactionTemplate
| 31 | $tt__save in HotelController.groovy
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 617 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
我做错了什么?如何进行交易 "active" ?
尝试排除 envers 的传递依赖。为我工作。我想拉入 hibernate-entitymanager
在这里没有任何好处。所以:
compile("org.hibernate:hibernate-envers") { transitive = false }
我想在我的 Grails (v3.0.11) 应用程序中使用 Hibernate Envers。由于 grails envers 插件已经死了,我试着自己做。
我做了什么:
在 build.gradle 中,我添加了 Hibernate Envers 依赖项
compile "org.hibernate:hibernate-envers"
我的域看起来像:
import org.hibernate.envers.Audited
@Audited
class Hotel {
String name
}
在脚手架Controller中,我只改了:
class HotelController {
...
@Transactional
def save(Hotel hotel) {
...
Hotel.withTransaction {
hotel.save flush:true
}
...
}
...
}
保存时出现以下异常:
URI
/hotel/save
Class
org.hibernate.envers.exception.AuditException
Message
null
Caused by
Unable to create revision because of non-active transaction
Line | Method
->> 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 617 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
Caused by HibernateSystemException: Unable to create revision because of non-active transaction; nested exception is org.hibernate.envers.exception.AuditException: Unable to create revision because of non-active transaction
->> 32 | doCall in HotelController.groovy
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute . in grails.transaction.GrailsTransactionTemplate
| 31 | $tt__save in HotelController.groovy
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 617 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
Caused by AuditException: Unable to create revision because of non-active transaction
->> 32 | doCall in HotelController.groovy
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute . in grails.transaction.GrailsTransactionTemplate
| 31 | $tt__save in HotelController.groovy
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate
| 93 | execute in grails.transaction.GrailsTransactionTemplate
| 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 617 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
我做错了什么?如何进行交易 "active" ?
尝试排除 envers 的传递依赖。为我工作。我想拉入 hibernate-entitymanager
在这里没有任何好处。所以:
compile("org.hibernate:hibernate-envers") { transitive = false }