- - PR -
Spring2.0について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2007-11-21 10:11
ソースが載ってないので勝手にWebアプリだと想定すると、
@ many-to-one の属性に lazy="false" を指定する A ページを生成する前にJavaコード内で department にアクセスする B OpenSessionInViewFilter を有効にする といったところで解決すると思います。 |
|
投稿日時: 2007-11-21 10:27
回答ありがとうございました。
>> many-to-one の属性に lazy="false" を指定する デフォルトはlazy="true"のが気づかずに、すべてのlazy="false" を思い込みました。 @とBの方法を両方試してみました。 無事解決ができました。 どうもありがとうございます。 |
1