【问题标题】:How to map a set of objects in Hibernate without primary keys being equally named?如何在没有同名主键的情况下映射 Hibernate 中的一组对象?
【发布时间】:2009-06-19 14:03:26
【问题描述】:

我有一个代表表的域对象类。该类与另一个表有关联,但源类的属性与目标类的属性命名不同,我不知道如何对其进行休眠映射。

这是一个具有集合的类的示例(一个 CT 到多个 R 实例):

public class CT {
    // This is the property in the property-ref down below
    private String b;

    // The set of Rs I want to get - there may be none that correspond to a CT instance.
    private Set rs;
}

public class R {
    // This property is mapped to the column name below.
    private String rBc;
}

<!--Snippet of the mapping for class CT-->

 <set name="rs" lazy="true" sort="MyComparator" table="R" >
      <key column="R_COLUMN_NAME_THAT_REPRESENTS_THE_RELATIONSHIP" property-ref="b" />
      <one-to-many class="CLASS_THAT_R_IS" />
 </set>

Hibernate 接受这个映射,但是当我从我知道应该存在的 CT 实例中提取 Rs 集时,我只得到一个空的 PersistentSet。

请注意,对于每个 CT 实例,完全有可能没有或超过一个 R。这就是为什么我在那里有比较器的原因 - 我无法弄清楚如何轻松地告诉 Hibernate 如何在没有显式 SQL 的情况下执行 ORDER BY 子句(我犹豫是否要在 Hibernate 映射中编写。

有人可以帮我吗?

【问题讨论】:

  • 我没有清楚地了解情况的对象方面。你能说更多关于对象在对象方面的作用吗? CT 和 R 的相对寿命和所有权状态如何?我已经设法将我所有的收藏都写成多对一。多对一和一对多的功能似乎有所不同。

标签: hibernate properties one-to-many no-match


【解决方案1】:

问题可能出在&lt;set ..&gt; 映射中的table="R"。这告诉 hibernate 使用连接表而不是直接在子表中查找外键。从命名我了解到您没有使用连接表。对吗?

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 2023-03-08
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多