Hibernate:指定父实体<join>中的哪个列应该使用</join>

时间:2010-08-26 21:21:03

标签: java hibernate orm

我的HBM文件中有以下实体:

<join table="v_price_change_current_prices" fetch="join" inverse="true">
    <key column="product_color_id" />
    <property name="oldMSRP" column="msrp" />
    <property name="oldList"  column="list" />
</join>

我的PRICE_CHANGE表有一个ID列(主键)和一个PRODUCT_COLOR_ID列。

我希望SQL Hibernate生成将V_PRICE_CHANGE_CURRENT_PRICES连接到PRICE_CHANGE.PRODUCT_COLOR_ID,如下所示:

    SELECT * from PRICE_CHANGE a, V_PRICE_CHANGE_CURRENT_PRICES b 
where a.product_color_id=b.product_color_id

但是它加入PRICE_CHANGE.ID而不是

    SELECT * from PRICE_CHANGE a, V_PRICE_CHANGE_CURRENT_PRICES b 
where a.product_color_id=b.product_color_id

有没有办法告诉元素使用PRICE_CHANGE.PRODUCT_COLOR_ID而不是PRICE_CHANGE.ID?

1 个答案:

答案 0 :(得分:3)

根据文档,使用property-ref元素中的<key>可能会这样做:

  

5.1.21. Key

     

<key>元素包含了一些内容   本指南中的时间。它出现   父映射元素的任何位置   定义一个新表的连接   引用的主键   原始表。它还定义了   连接表中的外键:

<key
        column="columnname"                      (1)
        on-delete="noaction|cascade"             (2)
        property-ref="propertyName"              (3)
        not-null="true|false"                    (4)
        update="true|false"                      (5)
        unique="true|false"                      (6)
/>
     
      
  1. column(可选):外键列的名称。这也可以   由嵌套指定   元件(一个或多个)。
  2.   
  3. on-delete(可选 - 默认为noaction):指定是否   外键约束有   数据库级别级联删除已启用。
  4.   
  5. property-ref(可选):指定外键引用   到不是主要的列   原表的关键。它是   为遗留数据提供。
  6.   
  7. not-null(可选):指定外键列不是   空。无论什么时候这都暗示着   外键也是其中的一部分   主键。
  8.   
  9. update(可选):指定永远不应该使用外键   更新。无论什么时候这都暗示着   外键也是其中的一部分   主键。
  10.   
  11. unique(可选):指定外键应具有唯一性   约束。这意味着什么   外键也是主要的   键。
  12.   

但我不确定这是否已实施(请参阅HHH-551HHH-1829)。

如果您真的不想使用共享主键,另一种方法是使用合成和“真正的”one-to-one关联。

参考