首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(未能延迟初始化集合,没有关闭会话或会话)石英-0.4.2中的grails 1.3.7错误

(未能延迟初始化集合,没有关闭会话或会话)石英-0.4.2中的grails 1.3.7错误
EN

Stack Overflow用户
提问于 2013-12-06 15:04:53
回答 2查看 6.8K关注 0票数 3

作业

代码语言:javascript
复制
 class PicSchedulerJob {
        def myDataService
        def springSecurityService
        static triggers = {
            simple name:'picsJob', startDelay:1000,repeatInterval:30*60*1000 
        }
        def group = "icsJobGroup"

        def execute() {

            def userList=User.list()
            userList?.each{User user->  
                def fullList= Album.findAllByUser(user) 
                springSecurityService.reauthenticate(user.username)
                fullList?.each{Album a->
                    myDataService.removePicsFilter( a)          
                }

            }
        }
    }

方法:

代码语言:javascript
复制
def removePicsFilter(Album a){
        def tempList=a.photo
        int siz=tempList.size()?:0
        for(int i=0;i<siz;i++)  {
            Photo photodb=tempList[i]
            PhotoConnection photoConnection=PhotoConnection.findByPhoto(photodb)
                photoConnection?.tags.each{
                    Tag t=Tag.get(it.id)
                    t.delete()
                    }


        }
        a.save(validate:true,flush:true)
    }

错误:2013-12-06 20:20:59,618石英session _Worker-5 hibernate.LazyInitializationException错误-未能延迟初始化集合,没有会话或会话关闭org.hibernate.LazyInitializationException:未能延迟初始化集合,没有在org.hibernate.LazyInitializationException关闭会话或会话

作业是石英作业代码,方法代码由作业调用,它的错误是我所面临的错误。我也尝试用Album.withTransaction和Album.withSession的代码,但无法修复它。请在这个上指导我

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-07 06:56:20

问题是,要么Hibernate会话未打开,要么已关闭。请通过链接http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazy

此外,对象可能与hibernate会话分离。你可以试试这个:

将对象附加回hibernate会话,如下所示: object.attach() (http://grails.org/doc/2.2.1/ref/Domain%20Classes/attach.html)使两个域类之间的关联不再懒惰(http://grails.org/doc/2.2.x/ref/Database%20Mapping/lazy.html)

票数 3
EN

Stack Overflow用户

发布于 2013-12-06 15:10:41

希望能帮上忙。

使用事务处理中的Hibernate.initialize()初始化延迟对象。

代码语言:javascript
复制
 start Transaction 
      Hibernate.initialize(album.photo());
 end Transaction 

 out of Transaction
   tempList=album.photo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20427118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档