гибернация отображения внешнего ключа много-к-одному
Я работаю над этим довольно долго, но до сих пор не могу понять, что не так с моим кодом. Каждая служба имеет несколько профилей, но каждый профиль имеет только один сервис.
Service
{
Long service_id; // primary key
... getter/setter
}
Profile
{
Long profile_id; // primary key
Long service_id; // foreign key
... getter and setter
}
В Профиль.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, joins и т. д. Поэтому ваш код должен быть примерно таким:
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> ...