2013-12-06 1 views
3

Job(не в состоянии инициализации лениво коллекции, нет сеанса или сеанс был закрыт) ошибку в кварц-0.4.2 в Граалей 1.3.7

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] ERROR hibernate.LazyInitializationException - не удалось лениво инициализировать коллекцию, сеанс или сеанс не были закрыты org.hibernate.LazyInitiali zationException: не удалось инициализировать лениво коллекции, нет сессию или сессия была закрыта на org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException (AbstractPersistentCollection.java:380)

Работа является кварц работа код, метод код называется заданием и его ошибка - это ошибка, с которой я столкнулся. Я также пробую код с Album.withTransaction, а также Album.withSession, но не смог его исправить. Pls руководство меня на этом

+2

Где вопрос ? – Patrick

+0

@Patrick Job - это кварцевый код задания, код метода, называемый заданием, и его ошибка - это ошибка, с которой я столкнулся. Я также пробую код с Album.withTransaction, а также Album.withSession, но не смог его исправить. Pls руководство меня на этом – user3074874

+0

Вы можете улучшить свой вопрос, спросив SSCCE: http://sscce.org. –

ответ

3

Проблема в том, что сеанс Hibernate не открыт или закрыт. Просьба перейдите по ссылке http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazy

Также может быть случай, когда объект был отсоединен от сеанса спящего режима. Вы можете попробовать это:

присоединить объект обратно в спящем сессии, как это: 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

Спасибо @amit object.attach() отлично работает для меня :) – user3074874

+1

Отличная работа @amit. – Ashu

1

Надеюсь, это поможет.

Используйте Hibernate.initialize() внутри транзакции для инициализации ленивых объектов.

start Transaction 
     Hibernate.initialize(album.photo()); 
end Transaction 

out of Transaction 
    tempList=album.photo 
+1

Спасибо, это помогло мне решить проблему в Grails, где ассоциация hasMany была ленивой после закрытия сессии. Просто инициализация ассоциации сделала трюк! –

Смежные вопросы