将主键映射到具有不同名称的另一个表中的非主键

时间:2011-10-19 17:05:48

标签: java xml hibernate

我有一个我称之为Foo的对象,我想像这样映射Foo:

Foo
-FooId (PK)
-Country
-Name
-Amount

问题是数据库设计很差,所以我有两个没有链接表的表:

Foo (TABLE)
-FooId (PK)
-CountryId (problem child here) - COUNTRY_ID
-Name
-Amount

FooCountry (TABLE)
-CountryId (PK)
-CountryName
-ActualCountryId (I want to tie this to the "Foo" CountryId) - ACTUAL_ID

我正在使用旧版本的hibernate和Java,因此我无法访问注释,所有这一切都必须使用普通的旧XML映射。

简而言之,我想将列“CountryId”映射到列“ActualCountryId”并基于它获取FooCountry表内的完整值(即第一个示例中的“Country”)。我很确定“ActualCountryId”列是唯一的,但它没有在DB中以这种方式编码,它只是一个普通的属性列。

有人可以解决这个问题吗?

编辑:作为额外奖励,我如何在Foo中定义“Country”对象?作为FooCountry?

编辑:这是我在Foo XML类区域内的映射

<key-many-to-one  name="countryId" class="FooCountry" property-ref="actualCountryId" column="COUNTRY_ID" />

我还为两个表添加了列名。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望具有多对一关联,但是使用不是目标表主键的列的外键。这在Hibernate reference documentation中有详细描述。您只需在property-ref="propertyNameFromAssociatedClass"元素中使用many-to-one

必须将FooCountry表映射为常规实体。