2009-07-03 10 views

答えて

1
  1. クラスメンバーはプライベートにする必要があります。
  2. オブジェクトがHibernate Sessionに接続されている場合は、プロキシで作業しています。だから、クラスメンバーに直接アクセスしたいのであれば(悪いです!)、まずオブジェクトをデタッチする必要があります。
+0

私はあなたがクラスメンバーが常にプライベートでなければならないことを意味していると思います。はい、私は同意しますが、このコードを継承し、JSPで何千もの参照を変更する必要があります。 – Jesse

+0

さて、私は混乱したアーキテクチャがあなたのせいではないことを願っています;)。しかし、オブジェクトを切り離そうとしましたか?このようなアーキテクチャに基づいて、OpenSessionInViewFilter(または(反) "パターン")))が使用されているので、オブジェクトは要求内で切り離されません。 実際のオブジェクトはプロキシであり、メンバやメソッドへのアクセスは永続性マネージャの戦略や実装に依存していることに注意してください。また、Hibernateは、メンバーに直接アクセスしないように、いくつかのルールが守られていることを前提としています。 – cafebabe

+0

私は実際にアーキテクチャを修正しようとしています。 オブジェクトが取り出された後に、そのオブジェクトを取り除こうとしましたが、何かにアクセスしようとした後、私にはアクセスできませんでした:org.hibernate.LazyInitializationException:プロキシを初期化できませんでした - セッションなし – Jesse

1

怠惰なフェッチの問題のような音がします。パブリックリファレンスはあなたが直接アクセスしようとするとnullですが、 "get"でそれを行うと、Hibernateはデータベースに呼び出して、そのインスタンスをあなたのために水分補給することを知っています。

+0

これは、私がa.getB()を呼び出してからa.bを呼び出すことができ、それでもa.bを呼び出すことができないという点を除いて、私に似ています。 – Jesse

0

bフィールドが一時的であるためです。

一時的にする必要はありますか?削除してください。

+0

一時的であることが唯一の必要性は、私がデータベース内のそのリンクを望んでいないということです。 – Jesse

関連する問題