我有一个类似的场所映射类:
<class name="Venue">
<id name="venueId">
<generator class="identity"/>
</id>
<natural-id>
<property name="name"/>
<property name="countryISO2"/>
</natural-id>
<property name="name"/>
<property name="locale"/>
<component name="location">
<property name="countryISO2"/>
<property name="city"/>
</component>
</class>
问题是无法以这种方式识别
name="countryISO2"
标记中的natural-id
属性。我还尝试了name="location.countryISO2"
,该方法也不起作用。有人可以建议如何解决这个问题吗?
更新:
例外是:
Caused by: org.hibernate.PropertyNotFoundException: field [countryISO2] not foun
d on nl.texxi.oct.model.Venue
at org.hibernate.property.DirectPropertyAccessor.getField(DirectProperty
Accessor.java:182)
at org.hibernate.property.DirectPropertyAccessor.getField(DirectProperty
地点类别为:
public class Venue {
private int venueId;
private String name;
private Locale locale;
private Location location;
// getters and setters
}
当然还有
Location
类,其中包含一些字段,例如countryISO2
,city
。在数据库中,
venue
表包含:venueId, name, locale, countryIso2, city
因此,基本上,位置是仅域模型上某些字段的组成。 最佳答案
根据休眠DTD,这应该可以解决您的问题
<natural-id>
<component name="location">
<property name="countryISO2"/>
<property name="city"/>
</component>
</natural-id>
并且您应该删除映射底部的
<component>
。