Hibernate 在圣杯中冬眠

Hibernate 在圣杯中冬眠,hibernate,grails,hibernate-envers,Hibernate,Grails,Hibernate Envers,我想在我的Grails(v3.0.11)应用程序中使用Hibernate Envers。因为grails envers插件已经死了,所以我试着自己去做 我所做的: 在build.gradle中,我添加了Hibernate Envers依赖项 编译“org.hibernate:hibernate envers” 我的域名看起来像: import org.hibernate.envers.Audited @Audited class Hotel { String name } 在脚手架控

我想在我的Grails(v3.0.11)应用程序中使用Hibernate Envers。因为grails envers插件已经死了,所以我试着自己去做

我所做的:

在build.gradle中,我添加了Hibernate Envers依赖项
编译“org.hibernate:hibernate envers”

我的域名看起来像:

import org.hibernate.envers.Audited

@Audited
class Hotel {
    String name
}
在脚手架控制器中,我只更改了:

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$2
|     93 | execute . in grails.transaction.GrailsTransactionTemplate
|     31 | $tt__save in HotelController.groovy
|     96 | doInTransaction in grails.transaction.GrailsTransactionTemplate$2
|     93 | execute   in grails.transaction.GrailsTransactionTemplate
|     96 | doInTransaction in grails.transaction.GrailsTransactionTemplate$2
|     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$2
|     93 | execute . in grails.transaction.GrailsTransactionTemplate
|     31 | $tt__save in HotelController.groovy
|     96 | doInTransaction in grails.transaction.GrailsTransactionTemplate$2
|     93 | execute   in grails.transaction.GrailsTransactionTemplate
|     96 | doInTransaction in grails.transaction.GrailsTransactionTemplate$2
|     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

我做错了什么?如何使交易“活跃”

尝试排除enver的可传递依赖项。为我工作。我猜在这里使用hibernate entitymanager没有任何好处。因此:


compile(“org.hibernate:hibernate envers”){transitive=false}

看起来您实际上在那里使用了两个事务。尝试删除
with transaction
闭包或
@Transactional
注释。看看范围中只有一个事务会发生什么。我两个都试过了,没有任何变化。我只是尝试使用withTransaction方法,因为我在旧的envers插件()中看到了它