- PR -

Spring2.0について

1
投稿者投稿内容
HSIN YI
会議室デビュー日: 2007/11/19
投稿数: 4
お住まい・勤務地: 神戸
投稿日時: 2007-11-19 15:26
こんにちは。Spring2.0の初心者です。
この前、某会社のSpring 2.0の研修を受けて、Spring2.0とHibernateについて勉強しています。
2週間前に先輩からもらったSpring1.X(Hibernate2.X)のサンプルプロジェクトをもらい、Spring2.0の書き方を変えてみました。(Hibernateの部分はHibernate3のHibernateDaoSupportを使用しています。)
でも、データ関連付けの部分はうまくいかず、many-to-oneのデータを取ってこられないのです。
*TBL:Employee,Department。
Employeeのマッピングライルで<many-to-one name="department" column="DEPARTMENT_ID" class="Department" not-null="true"/>を設定しています。Employeeエンティティの中にdepartmentをインスタンスとして持っています。Employeeを検索する際に、Departmentの情報も取ってくる動きを予想していましたが、セッションがクローズされていたから取れなかったのです。

エラー文:2007-11-19 15:08:05,171 ERROR <init> (LazyInitializationException.java:19) - could not initialize proxy - the owning Session was closed
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
Sessionがデータを取得する前に閉じられたようです。
データアクセスの部分はgetHibernateTemplateメソッドで取っています。
getHibernateTemplateメソッドは自動的にセッションをopen,colseするようです。
勝手にcolseされないように、トランザクション宣言でトランザクションマネージャで管理しています。なのに、やはりDaoのところでセッションが閉じられているようです。

3日間かかって原因調査しましたが、やはり分からなくて、とても困りました。
誰か教えていただけないのでしょうか。
ありがとうございます。


[ メッセージ編集済み 編集者: HSIN YI 編集日時 2007-11-19 17:57 ]
でるびすた
常連さん
会議室デビュー日: 2005/06/15
投稿数: 22
投稿日時: 2007-11-21 10:11
ソースが載ってないので勝手にWebアプリだと想定すると、

 @ many-to-one の属性に lazy="false" を指定する
 A ページを生成する前にJavaコード内で department にアクセスする
 B OpenSessionInViewFilter を有効にする

といったところで解決すると思います。
HSIN YI
会議室デビュー日: 2007/11/19
投稿数: 4
お住まい・勤務地: 神戸
投稿日時: 2007-11-21 10:27
回答ありがとうございました。
>> many-to-one の属性に lazy="false" を指定する
デフォルトはlazy="true"のが気づかずに、すべてのlazy="false" を思い込みました。
@とBの方法を両方試してみました。
無事解決ができました。
どうもありがとうございます。 
1

スキルアップ/キャリアアップ(JOB@IT)