我試圖實現一個one to one
hibernate
關係mapping
,我是新的休眠技術。我的兩個實體類是Employee
和Client
。客戶端應該有一個employee ID
列作爲數據庫表中的外鍵;即this
客戶由this
僱員處理。現在有兩個jsp頁面,通過它我將提交員工和客戶的詳細信息。首先,我將添加/提交員工jsp。然後在客戶端jsp頁面上會有一個選擇框,其中包含employeeIDs作爲其值。我做了我的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();
}
}
在這裏,我不知道這藍圖是對還是錯。我可以設置員工ID,該ID將來自我的客戶端jsp頁面(從<select>
框中)。我很困惑,因爲在這裏我只設置了員工ID,這個ID必須已經存在才能成爲客戶的有效外鍵。但是沒有驗證該員工ID是否已經存在的檢查。在客戶端對象之前,Employee對象肯定會被保存(從employee.jsp
)。我做對了嗎?
我相信你可以用你當前的代碼保存'rwClient1'。但是,如果在jsp顯示之後但在保存'rwClient1'之前,帶有id 2的'rwEmp'會從其他操作(jsp)中刪除,那該怎麼辦?這是你問的場景嗎?並且爲什麼你有'unique ='true''多對一',因爲一個員工ID可以分配給多個客戶? –
是的,它正在被保存。是的,我同樣關心你在這裏提到的有關如果在保存rwClient1之前刪除empID 2會發生什麼情況。有人告訴我,'unique = true'是一對一的關係。我需要:一個員工ID只能分配給一個客戶。 – JPG
這裏最好的辦法是什麼? – JPG