Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > hibernate on-to-many внтри субкласса


Автор: Dblma 24.11.2010, 14:28
Добрый день.
Не знал точно, где тему создавать - если не прав переместите, пожалуйста.

есть hibernate-маппинг:

Код

<class discriminator-value="Entity" name="Domain.Super.Entity" polymorphism="implicit" table="ENTITY">
        <id name="id" type="string">
            <column name="ID"/>
            <generator class="uuid"/>
        </id>
        <!-- more -->
        <subclass discriminator-value="Human" extends="Domain.Super.Entity" name="Domain.Human">
            <set name="contacts">
                <key column="CONTACTOR_ID"/>
                <one-to-many class="Domain.Contact" not-found="ignore"/>
            </set>
            <join table="HUMAN">
                <key column="ID"/>
                <!-- more -->
            </join>
        </subclass>
        <subclass discriminator-value="Contact" extends="Domain.Super.Entity" name="Domain.Contact">
            <join table="CONTACT">
                <key column="ID"/>
                <many-to-one access="field" class="Domain.Human" name="contactor">
                    <column name="CONTACTOR_ID"/>
                </many-to-one>
                <!-- more -->
            </join>
        </subclass>
</class>


Но, при попытке получить Domain.Human субселект для контактов получается вот такой:
Код

/* load one-to-many Domain.Human.contacts */
select contacts0_.ID                as ID3_,
       contacts0_.ID                as ID1_2_,
       contacts0_.TS                as TS1_2_,
       contacts0_.DOMAIN_CLASS_ID   as DOMAIN3_1_2_,
       contacts0_.USER_ID           as USER5_1_2_,
       contacts0_.DEPARTMENT_ID     as DEPARTMENT6_1_2_,
       contacts0_.IS_ACTIVE         as IS7_1_2_,
       contacts0_.IS_SYSTEM         as IS8_1_2_,
       contacts0_.MAIL_CLASS_ID     as MAIL2_1_2_,
       contacts0_1_.CONTACT_KIND_ID as CONTACT2_9_2_,
       contacts0_1_.VALUE           as VALUE9_2_,
       contacts0_1_.CONTACTOR_ID    as CONTACTOR4_9_2_
  from ENTITY contacts0_
 inner join CONTACT contacts0_1_ on contacts0_.ID = contacts0_1_.ID
 where contacts0_.CONTACTOR_ID = ?

Т.е. hibernate строит запрос неправильно - CONTACTOR_ID находится не в ENTITY, а в субклассе - CONTACT.
Как указать хибернэйту, к какой таблице строить соединение?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)