Отображение Hibernate с несколькими таблицами и собственным SQL

У меня есть некоторые сомнения относительно того, как сделать файл hbm.xml для отображения в Hibernate. Проблема возникает при отображении объекта Java, который имеет поля в нескольких таблицах.

Используемая нами пользовательская среда требует наличия файла hbm.xml для каждого объекта, но в этом случае его поля находятся в трех таблицах, поэтому я хочу сделать собственный запрос SQL (еще одно требование сверху) и переместить значения полей в результат для нового объекта, описанного в файле отображения Hibernate.

Мой файл отображения hibernate выглядит примерно так:

<hibernate-mapping>
<class name="com.mycompany.myproject.model.scommons.companhiaalmacen.CompanhiaAlmacen" table="COMPANHIA_ALMACEN">
    <id name="companyWarehouseId" type="java.lang.Integer" access="field">
        <column name="ID_EMPRESA_NAVE" />
        <generator class="assigned" />
    </id>
    <property name="companyId" type="java.lang.Integer">
        <column name="ID_EMPRESA" />
    </property>
    <property name="warehouseDCId" type="java.lang.Integer">
        <column name="ID_CENTRO_DISTRIBUCION_NAVE" />
    </property>

    <!-- HERE: This attribute NOMBRE_COMERCIAL belongs not only to another table (EMPRESA) -->
    <!-- but also to another schema (GENERAL) as well -->
    <property name="name" type="java.lang.String">
        <column name="NOMBRE_COMERCIAL" />
    </property>

    <property name="creationDate" type="java.util.Date">
        <column name="FECHA_ALTA" />
    </property>
    <property name="creationUser" type="java.lang.String">
        <column name="USUARIO_ALTA" />
    </property>
</class>
</hibernate-mapping>

Я не знаю, как сделать это без создания oneToMany или ManyToOne. Я не хочу, чтобы Hibernate извлекал объект и его сопоставленные сущности, потому что я хочу получить это из моего собственного запроса db2.

Кто-нибудь знает, как это сделать или где я могу это найти, пожалуйста? (Я уже искал SQLQuery в Hibernate API, это просто отображение, которое я не получаю).

Заранее спасибо.

1 ответ

Решение

Вы можете переопределить любой оператор CRUD, как требуется в Hibernate. См. Разделы 18.3 и 18.4 ниже:

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/querysql.html

Также возможно сопоставить сущность нескольким таблицам и иметь таблицы в нескольких схемах через атрибут схемы определения таблицы, так что это может быть лучшим подходом.

Смотрите раздел 2.2.7 ниже:

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

и следующая показывающая вторичная таблица может быть в другой схеме:

http://docs.oracle.com/javaee/5/api/javax/persistence/SecondaryTable.html

Для этих аннотаций будут XML-эквиваленты.

Другие вопросы по тегам