1

私はHibernateでPOJOのツリーをマップしようとしています。これにより、(a)どこでも主キーにUUIDを簡潔に使用でき、(b)他の点では無関係なテーブル間にセットのような関係を外部から課すことができます。これはアノテーションを使用するとうまく機能するようですが、私の人生では、HBMXMLマッピングを使用して同じように機能させることはできません。

たとえば、次の(省略形の)クラスがあるとします。

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Unique {
    private String uuid;
}

@Entity
public class Relationship extends Unique {
    @OneToMany
    private Set<Unique> members;
}

@Entity
public class Activity extends Unique {
    private String name;
}

@Entity
public class AssociatedXML extends Unique {
    @Lob
    private String xml;
}

...イージーピーシー。hbm2ddlを実行すると、テーブル、、、、およびが作成さRelationshipれます。次のHQLのようなクエリはうまく機能しているようです。Relationship_UniqueActivityAssociatedXML

session.createQuery("select xml "
    + "from AssociatedXML as xml, Relationship as rel "
    + "left join rel.members as m "
    + "where m.uuid = :uuid").setString("uuid", activity.getUuid());

その間、私はXML構成に移行しようとしています。POJOはXMLスキーマから生成されています。ソースが生成されるので、注釈を追加するためにソースを手動で編集することは避けようとしています。

私は考えられるすべてのXML構成を試しました(<hbm2hbmxml/>Hibernateツールの出力をだましました)。追加の結合を含む追加の親テーブルを作成しない構成、またはセッションファクトリで次のエラーで失敗する構成を思い付くことができません。Unique

アソシエーションはマップされていないクラスを参照します:一意

私のXML構成ファイルがどのように見えるべきかについて誰かが提案を持っていますか?それとも私は悪い道を進んでいますか?

4

1 に答える 1

1

これは次のようなものです。

<class name="Unique" abstract = "true">
    <id name="uuid" />

    <union-subclass name="Relationship">
        <set name="members" table = "Relationship_Unique" >
            <key />
            <many-to-many class = "Unique" unique="true"/>
        </set>
    </union-subclass>

    <union-subclass name="Activity">
        <property name = "name" />
    </union-subclass>

    <union-subclass name="AssociaXML">
        <property name = "xml" />
    </union-subclass>
</class>

参照:

于 2010-12-23T18:10:05.723 に答える