作业
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)
}
}
}
}
方式:
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 [quartzScheduler_Worker-5]错误hibernate.LazyInitializationException - 懒得初始化集合,没有会话或会话被关闭 org.hibernate.LazyInitializationException:懒得初始化集合,没有会话或会话被关闭 在org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
作业是石英作业代码,作业调用的方法代码,它的错误是我面临的错误..我也尝试使用Album.withTransaction和Album.withSession但不能修复它的代码。请指导我
答案 0 :(得分:3)
问题是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)
答案 1 :(得分:1)
希望它会有所帮助。
在Transactional中使用Hibernate.initialize()来初始化惰性对象。
start Transaction
Hibernate.initialize(album.photo());
end Transaction
out of Transaction
tempList=album.photo