2010-05-11 59 views
2

我有一個通過Spring-MVC公開的REST服務。我有一個特定的方法被正確映射並通過HTTP調用進行調用。我的Spring應用程序包含HibernateTransactionManager,事務通過@Transactional -annotations進行配置。我註釋是這樣的方法:LazyInitializationException在MessageConverter中使用@Transactional註釋

@Transactional(readOnly = true) 
@Override 
@RequestMapping(value = "/start", method = RequestMethod.GET) 
@ResponseBody 
public List<SomeObject> start(....) 

每當我稱之爲HTTP的方法我從一個org.springframework.http.converter.json.MappingJacksonHttpMessageConverterorg.hibernate.LazyInitializationException在我的應用程序上下文的約束。 @Transactional註釋是否也適用於MessageConverter

回答

2

你的轉換器類顯然是讀取配置爲在您的休眠配置中懶散地收集的字段。

兩個可能的解決方案:

  • 擴大您的交易方法以包含轉換器方法。
  • 編輯您的Hibernate配置以急切地獲取負責LazyInitializationException的字段。 (例如,該字段可以是數據庫中兩個表之間關係的一部分。)
+0

我已經通過執行您的第一個提議來解決了我的問題。其實問題是,我用於映射對象的另一個工具,複製persistbags而不是真正的集合... – Karl 2010-05-11 17:33:27

+1

Iam在這裏面臨同樣的問題,請問,你是怎麼回事?你是如何擴展交易方法的? – 2010-11-23 04:00:21

2

LazyInitializationException意味着您在嘗試讀取實體上的未初始化數據時關閉了休眠模式Session

你可以解決這個問題:

  • 要麼延長會話的生存期(使用OpenSessionInView
  • 預先初始化實體在服務方法,使用Hibernate.initialize(entity)
相關問題