我有一个我称之为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" />
我还为两个表添加了列名。
答案 0 :(得分:0)
如果我理解正确,您希望具有多对一关联,但是使用不是目标表主键的列的外键。这在Hibernate reference documentation中有详细描述。您只需在property-ref="propertyNameFromAssociatedClass"
元素中使用many-to-one
。
必须将FooCountry
表映射为常规实体。