我有以下結構的方法:的Grails GORM:無法初始化代理 - 沒有會話
public void run(){
...
for (...) { //this part works correct
User.withTransaction {
User user = User.findByUsername(...);
Position pos = Position.findByName(...)
if(pos){ ...
} else { ...
try{
pos.save(flush:true);
user.position = pos;
} catch (Exception e){ ... }
}
...
try{
user.save(flush:true, failOnError: true);
} catch (Exception e){ ... }
}
}
//this part doesn't work
User.findAll().each {
...
if (...){
User.withTransaction{
...
//here the operation fails with
//org.hibernate.LazyInitializationException:
//could not initialize proxy - no Session
if (!userDetailsMap.containsKey(it.username)
&& it.userStatus != blocked){
it.userStatus = blocked
it.save(flush:true)
}
}
}
}
}
我得到這裏唯一的例外是在我的代碼的第二部分org.hibernate.LazyInitializationException: could not initialize proxy - no Session
。這裏的userStatus
字段是對不同域類的引用。
我試着在檢查屬性之前將it.refresh()
和Hibernate.initialize(it)
添加到代碼中,但沒有用。我在這裏做錯了什麼?
更新:我試圖在檢查屬性之前調用it.attach
方法,但在方法調用it.attached
的值之後是false
。
您是否在視圖中調用此方法? – 2013-04-11 11:35:12
@SérgioMichels,不,這個方法是由調度器調用的。任務被添加到調用'run()'方法的調度器中。 – svz 2013-04-11 11:54:24