Hibernate中如何实现一对一的外键关系映射?

问题描述 投票:0回答:1

我正在尝试实现一对一 Hibernate 关系映射,并且我是 Hibernate 技术的新手。

我的两个实体类是

Employee
Client
Client
应该有一个
employeeID
列作为数据库表中的外键,即 this 客户由 this 员工处理。

现在,有两个 JSP 页面,我将通过它们提交员工和客户的详细信息。首先,我将添加/提交员工 JSP。然后在客户端 JSP 页面上会出现一个选择框,其中包含

employeeID
s 作为其值。

我已经完成了我的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(); } }

在此,我不确定这个蓝图是对还是错。

我可以设置

employeeID

吗,它将来自我的客户端 JSP 页面(来自

<select>
框中)。我很困惑,因为这里我只设置
employeeID
,它必须已经存在才能成为客户端的有效外键。但是没有检查验证这个
employeeID
是否已经存在。
Employee
对象肯定会在客户端对象之前保存(来自
employee.jsp
)。
我的做法正确吗?

java hibernate jsp hibernate-mapping
1个回答
0
投票
Client

表上声明一个特殊的外部标识符生成器,以从

Employee
表中获取主键值。添加
constrained="true"
以确保
Employee
存在。

<hibernate-mapping> <class name="com.rightwave.entities.RWClient" table="client_master"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="foreign"> <param name="property">poc_emp</param> </generator> </id> <one-to-one name="poc_emp" class="com.rightwave.entities.RWEmp" constrained="true"></one-to-one> <property name="strName" type="string" column="cl_name" /> </class> </hibernate-mapping>

	
© www.soinside.com 2019 - 2024. All rights reserved.