我使用Spring來管理我的服務層中的事務,並使用@Transactional
註釋。 這對於急切加載的集合來說很好,但對於延遲加載不利。Hibernate和Spring,加載處於惰性模式的集合
我無法使用OSV模式,我的應用程序是一個獨立的桌面客戶端應用程序。
所以我想到了一個解決方案,而這正是我試圖做的:
public abstract class TransactionTask {
public TransactionTask() {
}
public abstract void job();
}
在我的服務,我有:
@Transactional
public void doJob(Transactiontask tt){
tt.job();
}
它怎麼我用的是:
myService.doJob(new TransactionTask() {
@Override
public void job() {
//lazy code here
}
});
我希望看到這段代碼工作,因爲會話是在doJob方法中打開的(它被標記爲事務性),但它不起作用......例外是no session or session was closed
。 爲什麼這段代碼不起作用,以及我只能在需要時才加載集合?
我不想寫一個帶有指定方法的服務來加載集合,這不是一個解決方案。