我对如何在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,只是我没有得到的映射)。
提前谢谢。
答案 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等价物。