Job
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)
}
}
}
}
Method:
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)
}
Error:2013-12-06 20:20:59,618 [quartzScheduler_Worker-5] ERROR hibernate.LazyInitializationException - failed to lazily initialize a collection, no session or session was closed org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
Job is quartz job code, method code called by job and its error is the error i am facing..i also try the code with Album.withTransaction and also Album.withSession but not able to fix it. Pls guide me on this
The problem is that either the Hibernate session is not open or it was closed. Please go through the link http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazy
Also it may be the case that the object got detached from the hibernate session. You can try this:
attach the object back to the hibernate session like this: object.attach() (http://grails.org/doc/2.2.1/ref/Domain%20Classes/attach.html) make the association between the two domain classes non-lazy (http://grails.org/doc/2.2.x/ref/Database%20Mapping/lazy.html)