2012-02-21 39 views
0

Hibernateについて質問があります。私は3.1.3バージョンを使用していますが、私は2つのクラスを持っています。 他のオブジェクトを継承するオブジェクトを格納する方法

//User class, which is stored in the database and hibernate mapped 
public class User 

//Logged user class, this is a bean which inherits from user and 
//stores only user information and some session data 
public class LoggedUser extends User 

はどこか私のコードでは、私は私のセッションからLoggedUser Beanを取得し、私はユーザー変数に代入:これは私のシナリオです。

User user = Session.getBean("LoggedUser"); 

これはキャストせずに行うことができますが、私は私のデータベースに「ユーザー」オブジェクトを格納しようとすると、HibernateはLoggedUserは、Userクラスを拡張して認識していないので、私は、「不明なエンティティ」エラーを持っています。

Hibernateで継承を実装するためのチュートリアルはたくさんありますが、私はLoggedUserの追加プロパティを保存することには興味がありません。ユーザーテーブルにある情報のみを保存したいだけです。何か案が?

答えて

0

私はきれいな解決策についてはわかりませんが、ここでいくつかのヒントにつながるヒントを紹介します。

  1. マークLoggedUserエンティティ、@Transientと同じユーザー・テーブル(その可能な場合)、あなたが永続化したくないフィールド(LoggedUserフィールドのすべてを)マークにマップとして。
  2. @TransientフィールドをLoggedUserからユーザーに追加し、LoggedUserを削除します。
  3. LoggedUserを使用し、必要なプロパティでUserを初期化するコンストラクタをUserクラスに作成します。
  4. LoggedUserをLoggedUserDTOとマークし、エンティティをdto mapperにします。

これは明るい側に移動します。

+0

これは最初のオプションで動作しましたが、タグを使用する順序で、user.hbm.xmlにLoggedUserクラスを指定しました。ユーザーの属性は同じで、同じテーブルを指しています。ありがとう! –

+0

さて、その良い、しかし私はまだ継承+一時的なフィールドは、XMLのエンティティの複製よりも優れていると思うが、それは.. – JMelnik

関連する問題