Hibernate - 使用Jointable连接表

时间:2011-07-14 22:17:03

标签: hibernate

我有3张桌子:Band,BandGenre和Genre。

现在,我正在Band加入BandGenre,BandGenre加入Genre。这似乎有点多。我已经在不同的地方(包括这里)读过Hibernate可以找出一个连接表,但我无法弄清楚如何去做。

所以这是我的hbm.xml文件:

Band.hbm.xml

    <class name="com.myProject.hibernate.Band" table="Band">
        <id name="bandid">
            <generator class="increment"/>
        </id>
        <property name="name"/>
        <set name="bandGenres" lazy="false">
            <key column="bandid"/>
            <one-to-many class="com.myProject.hibernate.BandGenre"/>
        </set>
    </class>

BandGenre.hbm.xml(加入表)

    <class name="com.myProject.hibernate.BandGenre" table="BandGenre">
        <id name="bandgenreid">
            <generator class="increment"/>
        </id>
        <property name="bandid"/>
        <property name="genreid"/>
        <one-to-one name="genre" class="com.myProject.hibernate.Genre">
            <!-- the <formula> gets Hibernate to join Genre on BandGenre.genreid (rather than BandGenre.bandgenreid) -->
            <formula>genreid</formula>
        </one-to-one>
    </class>

Genre.hbm.xml

    <class name="com.myProject.hibernate.Genre" table="Genre">
        <id name="genreid">
            <generator class="increment"/>
        </id>
        <property name="parentid"/>
        <property name="name"/>
    </class>

如何让乐队直接加入流派(最好是我可以通过parentid订购)?

1 个答案:

答案 0 :(得分:0)

您可以将BandGenre用作join table加入BandGenre,就像这样。

<class name="com.myProject.hibernate.Band" table="Band">
    <id name="bandid">
        <generator class="increment"/>
    </id>
    <property name="name"/>
    <set name="genres" lazy="false" table="BandGenre">
        <key column="bandid"/>
        <many-to-many class="com.myProject.hibernate.Genre" column="genreid"/> <!-- add ' unique="true"' for a one-to-many relationship -->
    </set>
</class>

只需修改您的Band POJO,即可获得Genre而不是BandGenre的列表。继续,放弃BandGenre.hbm.xml