1

私はこれらの単純化されたタイプを持っています:

public class DataBean extends ZZZZZ {
    public String   name;
}

public class Member extends CCCCC {
    public DataBean m_data;
}

をマッピングしたいと思いますm_dataname直接以内にMember。2 つの間で継承を使用することはできません (既に占有されています!)。

これは理想的です:

<property name="m_data.name" column="name" type="string" access="field" />

何か案が?Hibernateで可能ですか?

現在、次のエラーが発生しています。

org.hibernate.PropertyNotFoundException: フィールド [m_data.name] が com.example.Member に見つかりません

主な理由は、http サービスから取得したデータ Bean を (再) 使用しようとしていて、すべてのフィールドを書き直したり、setter/getter を作成したりしたくないからです。

4

1 に答える 1

6

nameプロパティは実際にはクラスDataBeanにあります。したがって、取得している例外は明らかです。マッピングは のためMemberです。

DataBean埋め込まれMember、埋め込みクラスのフィールドをマップするには、<component>要素を使用する必要があります。

SO: Hibernate @embeddable annotation equals for XML mapping file? のこの質問に対するこの回答を参照してください。

回答には、埋め込みオブジェクトとは何か、それらをマップする方法を説明するページへのリンクもあります。

アップデート:

<component
        name="m_data"
        class="com.example.DemoBean"
        access="field">
    <property name="name" column="NAME" type="string" access="field" />
</component>
于 2012-06-12T01:22:43.947 に答える