2012-05-10 1 views
1

私はtable_AにマップされるBean_AというBeanクラスを持っています。このBean_AクラスはベースBeanクラスから継承され、ベースBeanクラスはBean_Aクラスと共にデータベースに保存されるunique_reference_key変数を持ちます。 Bean_Aとtable_Aのunique_reference_keyフィールドのためのhibernateファイルがすでに用意されています。Hibernateで親のBeanクラス変数をマップするには?

Bean_Aオブジェクトを保存していたときにこのunique_reference_key変数がデータベースに保存されるように、ベースBeanクラスをhibernateにマップする方法を知っていますか?このベースBeanクラスはデータベース内のどのテーブルにもマップされておらず、ベースBeanを「表す」そのようなテーブルはありません。

私はこの質問を投げ捨てる前に、私は次の記事を参照しましたが、それでも何か手がかりを得られませんでした。

  1. Hibernate simplifies inheritance mapping
  2. Hibernate Chapter 5.Basic O/R Mapping

答えて

0

私は休止状態にBean_AにベースBeanのプロパティをマッピングする方法についての解決策を発見しました。休止状態で

<class name="com.dao.pojo.BaseBean" abstract="true"> 
    <id name="theId" type="string"> 
     <column name="primary_key" length="15" /> 
    </id> 
    <property name="unique_ref_key" type="java.lang.String" column="unique_ref_key"/> 

    <union-subclass name="com.dao.pojo.Bean_A" table="table_A" lazy="false"> 
     ... 
    </union-subclass> 
</class> 

theIdがBean_A出身だったし、それがBaseBeanへの移行であったことに注意してください。新しいフィールドunique_ref_keyがtable_A内に作成されます。 JAVAで

:このソリューションは、他の人を助けることができる

public abstract class BaseBean { 
    private String theId; 
    private String unique_ref_key; 

    // getter and setter 
} 

public class Bean_A extends BeseBean { 
    ... 
} 

希望。

1

あなたはいくつかのコードを追加した場合、あなたのdescriptiinがより明確になります。

5.1.6.4:しかし、私はあなただけthe documentationで説明MappedSuperclass注釈、探していると思います。これは、通常の マッピングされたエンティティとしてそれを含めず 技術やビジネスのスーパークラスを介して共通の特性を共有すると便利な場合があり、スーパークラス

からプロパティを継承します(つまり、このエンティティに関して特定のテーブル)。そのためには を@MappedSuperclassとしてマップすることができます。

@MappedSuperclass 
public class BaseEntity { 
    @Basic 
    @Temporal(TemporalType.TIMESTAMP) 
    public Date getLastUpdate() { ... } 
    public String getLastUpdater() { ... } 
    ... 
} 

@Entity class Order extends BaseEntity { 
    @Id public Integer getId() { ... } 
    ... 
} 
関連する問題