Я пытаюсь реализовать связь one to one
hibernate
mapping
, и я новичок в технологии hibernate. Мои два класса сущностей: Employee
и Client
. Клиент должен иметь столбец employee ID
как внешний ключ в таблице базы данных; то есть this
Клиент обрабатывается this
сотрудник. Теперь есть две страницы jsp, через которые я отправлю детали сотрудника и клиента. Сначала я добавлю/отправлю сотрудника jsp. Затем на странице jsp клиента будет поле выбора, в котором будут указаны идентификаторы employeeID. Я сделал свою часть jsp. Но я сомневаюсь в том, что я один к одному сопоставляю отношения клиента с сотрудником. Поэтому я предоставляю свои файлы кода. Ниже мой код:как реализовать взаимно-однозначное отношение отношения внешнего ключа в спящем режиме
сотрудник класса: класс
public class RWEmp {
private int id;
private String strName;
private String strContactNum;
private String strDateOfJoining;
private String strDesignation;
public RWEmp(){
}
// getter/setters
}
клиент:
public class RWClient {
private int id;
private String strName;
private RWEmp poc_emp; // point of contact employee as employee object
public RWClient(){
}
// getter/setters
}
employee.hbm.xml прямо вперед. т.е. нет отношения. Но клиент имеет отношение has a
к объекту сотрудника.
client.hbm.xml:
<hibernate-mapping>
<class name="com.rightwave.entities.RWClient" table="client_master">
<id name="id" type="int">
<generator class="increment" />
</id>
<property name="strName" type="string" column="cl_name" />
<many-to-one name="poc_emp" class="com.rightwave.entities.RWEmp" column="poc_emp" unique="true"></many-to-one>
</class>
</hibernate-mapping>
сохраняющиеся класс:
public class PersistEntities {
public void clientPersist() {
Session session=Factory.getSession();
Transaction tr=session.beginTransaction();
RWEmp rwEmp =new RWEmp();
rwEmp.setId(2); // this will come from jsp page <select> value. I am doubtful of this, explained below in question.
RWClient rwClient1=new RWClient("wso2",rwEmp);
session.save(rwClient1);
session.flush();
tr.commit();
session.close();
}
}
Вот и я не уверен, если это план является правильным или неправильным. Могу ли я установить идентификатор сотрудника, который будет поступать с моей страницы jsp-клиента (с поля <select>
). Я смущен, потому что здесь я устанавливаю идентификатор сотрудника, который должен быть уже существующим, чтобы быть действительным внешним ключом клиента. Но нет проверок проверки того, является ли этот идентификатор сотрудника уже существующим или нет. Объект Employee определенно будет сохранен (от employee.jsp
) до объекта клиента. Правильно ли я делаю это?
Я считаю, что вы можете сохранить 'rwClient1' с вашим текущим кодом. Но тогда, если 'rwEmp' с id 2 удаляется из некоторого другого действия (jsp) после того, как ваш jsp был отображен, но перед сохранением' rwClient1'. Это сценарий, о котором вы спрашиваете? И почему у вас есть 'unique =" true "' for 'many-to-one', так как один идентификатор сотрудника может быть назначен нескольким клиентам? –
Да, это спасение. Да, я также беспокоюсь о том, что произойдет, если empID 2 удаляется до сохранения rwClient1. Мне сказал кто-то, что «unique = true» делает отношение один к одному. Мне нужно: один идентификатор сотрудника может быть назначен только одному клиенту. – JPG
Какой лучший подход здесь? – JPG