Hibernate 使用主键的一对一映射
我有两个简单的表:Item和ItemDetail 表项具有以下列:id、名称 表ItemDetail有以下列:itemId、颜色、大小 没有项目,ItemDetail永远不存在。项目可以不包含任何ItemDetail而存在。每个项目最多有一个ItemDetail 在hibernate中如何正确映射这种情况 到目前为止,我只找到了以下解决方案:Hibernate 使用主键的一对一映射,hibernate,orm,mapping,Hibernate,Orm,Mapping,我有两个简单的表:Item和ItemDetail 表项具有以下列:id、名称 表ItemDetail有以下列:itemId、颜色、大小 没有项目,ItemDetail永远不存在。项目可以不包含任何ItemDetail而存在。每个项目最多有一个ItemDetail 在hibernate中如何正确映射这种情况 到目前为止,我只找到了以下解决方案: <class name="Item" table="Item"> <id name="id" column="id">
<class name="Item" table="Item">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" />
<one-to-one name="itemDetail" class="ItemDetail" cascade="save-update"/>
</class>
<class name="ItemDetail">
<id name="itemId">
<generator class="foreign">
<param name="property">item</param>
</generator>
</id>
<one-to-one name="item" class="Item" constrained="true" />
<property name="color" />
<property name="size" />
</class>
我认为,从OOP的角度来看,如果object ItemDetail知道任何关于Item的信息,这是不正确的。这意味着它不应该有属性itemId和item。即使我们同意ItemDetail知道Item是正确的,但它有两个对Item的引用仍然是错误的——一个使用属性itemId,一个使用属性ItemDetail。然后很容易发生这两个属性不同步的情况。这是对不同于属性项的项的itemId引用。为了避免这种情况,我们需要在每次决定将项目设置为ItemDetail时同时更新itemId和item
有没有其他解决方案没有这些缺点
多谢各位
private class Item {
private long id;
private String name;
private ItemDetail detail;
}
private class ItemDetail {
private long itemId;
private Item item;
private int color;
private int size;
}