【问题标题】:Hibernate: specifying which column in parent entity <join/> should useHibernate:指定父实体 <join/> 中的哪一列应该使用
【发布时间】:2010-08-26 21:21:03
【问题描述】:

我的 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?

【问题讨论】:

    标签: java hibernate orm


    【解决方案1】:

    根据文档,在&lt;key&gt; 元素中使用property-ref 可能是可行的:

    5.1.21. Key

    &lt;key&gt; 元素有几个特点 本指南中的时间。它出现 父映射元素的任何位置 定义一个新表的连接 引用主键 原表。它还定义了 连接表中的外键:

    <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. on-delete(可选 - 默认为 noaction):指定是否 外键约束有 已启用数据库级级联删除。
    3. property-ref(可选):指定外键引用 到不是主要的列 原始表的键。这是 为旧数据提供。
    4. not-null(可选):指定外键列不 可以为空。这是暗示每当 外键也是一部分 主键。
    5. update(可选):指定外键不应该是 更新。这是暗示每当 外键也是一部分 主键。
    6. unique(可选):指定外键应具有唯一性 约束。每当 外键也是主键 键。

    但我不确定这是否真的实现(参见HHH-551HHH-1829)。

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

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多