Re: Hibernate mapping question...
От: deepsky Украина  
Дата: 22.08.05 10:12
Оценка:
Здравствуйте, BeerKiller, Вы писали:
....
BK>соответственно связи:

BK>PERSONS.P_ID <1---*> TAKENCARS.P_ID

BK>CARS.C_ID <1---*> TAKENCARS.C_ID

Есть два варианта:
первый — ваш подход, с использованием маппинга для таблицы связей

<hibernate-mapping>
    <class name="Person" table="PERSONS">
        <id name="id" type="long" column="P_ID">
            <generator class="sequence"/>
        </id>
        <property name="name" type="string" column="P_NAME"/>
        <property name="age" type="int" column="P_AGE"/>
    </class>
    <class name="Car" table="CARS">
        <id name="id" type="long" column="C_ID">
            <generator class="sequence"/>
        </id>
        <property name="model" type="string" column="C_MODEL"/>
        <property name="color" type="string" column="C_COLOR"/>
    </class>
    <class name="TakenCar" table="TAKENCARS">
        <id name="id" type="long" column="TC_ID">
            <generator class="sequence"/>
        </id>

        <!-- здесь и вопрос: как правильно
                смапить связи и нужно ли вставлять
                в этот класс свойства для полей
                P_ID и C_ID таблицы TAKENCARS ? -->

        <many-to-one name="person" class="Person" column="P_ID"/>
        <many-to-one name="car" class="Car" column="C_ID"/>
    </class>
</hibernate-mapping>


второй — с использованием маппинга многие ко многим. В TAKENCARS нужно будет удалить колонку
с первичным ключем, и в каждый из классов Car и Person добавить коллекцию элементов:

<hibernate-mapping>
    <class name="Person" table="PERSONS">
        <id name="id" type="long" column="P_ID">
            <generator class="sequence"/>
        </id>
        <property name="name" type="string" column="P_NAME"/>
        <property name="age" type="int" column="P_AGE"/>
        <set name="cars" table="TAKENCARS" cascade="all">
            <key column="P_ID"/>
            <many-to-many column="C_ID" class="Car"/>
        </set>
    </class>

    <class name="Car" table="CARS">
        <id name="id" type="long" column="C_ID">
            <generator class="sequence"/>
        </id>
        <property name="model" type="string" column="C_MODEL"/>
        <property name="color" type="string" column="C_COLOR"/>
        <set name="persons" table="TAKENCARS" inverse="true" cascade="all">
            <key column="C_ID"/>
            <many-to-many column="P_ID" class="Person"/>
        </set>
    </class>
</hibernate-mapping>


Второй вариант посложнее, но пожалуй более ближе к объектной модели.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.