Hibernate 休眠外键映射多对一

Hibernate 休眠外键映射多对一,hibernate,orm,map,foreign-keys,many-to-one,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中。我补充说 < ma

我已经做了很长一段时间了,但仍然不能找出我的代码有什么问题。 每个服务都有多个配置文件,但每个配置文件只有一个服务

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>


这是绘制地图的正确方法吗

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

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

Profile
{
Long profile_id; // primary key
Long service_id; // foreign key
... getter and setter
}
然后相应地设计对象模型。使用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
}
Service.hbm.xml
中(因为您的关联似乎是双向的):

。。。
...

谢谢您的回答。它工作得很好。我有时会被ibatis和hibernate弄糊涂~@莉莉,不客气。iBATIS更像是一个数据映射器(较低级别,更接近数据库),而不是一个真正的ORM。使用ORM,您必须考虑对象,而不是表。
...
<set name="profiles" inverse="true">
    <key column="PROFILE_ID" not-null="true"/>
    <one-to-many class="com.mot.diva.dto.Profile"/>
</set>
...