Отображение внешнего ключа гибернации многие-к-одному
Я работал над этим уже довольно давно, но до сих пор не могу понять, что не так с моим кодом. Каждый Сервис имеет несколько профилей, но каждый профиль имеет только один Сервис.
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 ответ
Решение
Каждый Сервис имеет несколько профилей, но каждый профиль имеет только один Сервис.
Затем спроектируйте свою объектную модель соответственно. При использовании инструмента ORM вам нужно думать об объекте (сущностях) и отношениях между сущностями, а не идентификаторами. 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>
...