Hibernate映射与几个表和Native SQL

时间:2013-10-29 11:53:27

标签: hibernate hibernate-mapping hbmxml

我对如何在Hibernate中为映射制作hbm.xml文件有一些疑问。映射具有多个表中的字段的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查询中获取它。

任何人都知道怎么做,或者我在哪里可以找到这个,拜托? (我已经在Hibernate API中查找了SQLQuery,只是我没有得到的映射)。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以根据Hibernate中的要求覆盖任何CRUD语句。见下文第18.3和18.4节:

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

还可以将实体映射到多个表,并通过表定义的schema属性在多个模式中使用表,因此这可能是更好的方法。

见下文第2.2.7节:

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

以下显示的辅助表可以在另一个模式中:

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

这些注释会有XML等价物。