Hibernate - объединение таблиц с помощью Jointable - PullRequest
1 голос
/ 15 июля 2011

У меня есть 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>

Чтомне сделать, чтобы моя группа присоединилась непосредственно к жанру (желательно, чтобы я мог заказать по парентиде)?

1 Ответ

0 голосов
/ 15 июля 2011

Вы можете использовать BandGenre в качестве таблицы соединений , чтобы объединить Band и Genre вместе, как это сделано.

<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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...