hibernate外键映射多对一

时间:2010-03-23 21:34:03

标签: hibernate orm map foreign-keys many-to-one

我已经研究了很长一段时间,但仍然无法弄清楚我的代码有什么问题。 每个服务都有多个配置文件,但每个配置文件只有一个服务。

Service
{
Long service_id; // primary key
... getter/setter
}

Profile
{
Long profile_id; // primary key
Long service_id; // foreign key
... getter and setter
}
在Profile.hbm.xml中

。我添加

< many-to-one name="service_id" class="com.mot.diva.dto.Service" column="SERVICE_ID" cascade="save-update">
< /many-to-one>

这是映射它的正确方法吗?

1 个答案:

答案 0 :(得分:10)

  

每个服务都有多个配置文件,但每个配置文件只有一个服务。

然后相应地设计您的对象模型。使用ORM工具时,您需要考虑对象(实体)和实体之间的关系,而不是ID。 ORM将负责PK,FK,连接等。所以你的代码应该是这样的:

public class Service implements Serializable {
    private Long service_id; // primary key
    private Set<Profile> profiles = new HashSet<Profile>();

    // ... getter/setter
}

public class Profile implements Serializable {
    private Long profile_id; // primary key
    private Service service;

    // ... getter and setter
}

Profile.hbm.xml映射文件:

....
<many-to-one name="service" 
             class="com.mot.diva.dto.Service"
             column="SERVICE_ID"
             cascade="save-update">
</many-to-one>
...

Service.hbm.xml中(因为您的关联似乎是双向的):

...
<set name="profiles" inverse="true">
    <key column="PROFILE_ID" not-null="true"/>
    <one-to-many class="com.mot.diva.dto.Profile"/>
</set>
...