Java 如何在hibernate中实现一对一的外键关系映射
我正在尝试实现一对一的Java 如何在hibernate中实现一对一的外键关系映射,java,hibernate,jsp,hibernate-mapping,Java,Hibernate,Jsp,Hibernate Mapping,我正在尝试实现一对一的hibernate关系映射,我对hibernate技术还不熟悉。我的两个实体类是Employee和Client。客户机应该有一个员工ID列作为数据库表中的外键;i、 e.此客户由此员工处理。现在有两个jsp页面,我将通过它们提交员工和客户的详细信息。首先,我将添加/提交员工jsp。然后在客户端jsp页面上会有一个选择框,其中包含EmployeeID作为其值。我已经完成了我的jsp部分。但我怀疑我的客户与员工的一对一映射关系。所以我提供了我的代码文件。下面是我的代码: 员工类
hibernate
关系映射,我对hibernate技术还不熟悉。我的两个实体类是Employee
和Client
。客户机应该有一个员工ID
列作为数据库表中的外键;i、 e.此
客户由此
员工处理。现在有两个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
}
<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();
}
}
客户端类:
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
}
<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();
}
}
employee.hbm.xml是直截了当的。i、 没有关系。
但客户与员工对象之间存在关系
client.hbm.xml:
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
}
<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();
}
}
持久化类:
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
}
<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();
}
}
公共类持久化实体{
public void clientPersist(){
Session Session=Factory.getSession();
事务tr=session.beginTransaction();
RWEmp RWEmp=新RWEmp();
rwEmp.setId(2);//这将来自jsp页面值。我对此表示怀疑,下面将对此进行解释。
RWClient rwClient1=新的RWClient(“wso2”,rwEmp);
session.save(rwClient1);
session.flush();
tr.commit();
session.close();
}
}
在这里,我不确定这个蓝图是对还是错。我可以设置员工ID吗?它将来自我的客户端jsp页面(在
框中)。我很困惑,因为这里我只设置员工ID,它必须已经存在,才能成为客户端的有效外键。但是没有验证此员工ID是否已存在的检查。Employee对象肯定会在客户端对象之前保存(从Employee.jsp
)。我这样做对吗?当与两个实体建立一对一关系时,两个实体都被分配了相同的主键。应在Client
表中声明一个特殊的外部标识符生成器,以从Employee
表中获取主键值。添加constrained=“true”
以确保员工存在
poc_emp
我相信您可以使用当前代码保存rwClient1
。但是,如果id为2的rwEmp
在显示jsp之后但在保存rwClient1
之前从其他操作(jsp)中删除,该怎么办。这就是你要问的情况吗?既然可以将一个员工id分配给多个客户,为什么要将unique=“true”
用于多对一
。是的,我也有你在这里提到的担心,如果在保存rwClient1之前删除empid2,将会发生什么。有人告诉我,unique=true
建立了一对一的关系。我需要:一个员工ID只能分配给一个客户。这里的最佳方法是什么?这是一个值得关注的问题。我认为这很合适。关于员工的独特性,我认为这不符合您的需要。请检查。是否有其他替代映射,我可以使用它来代替
,因为我需要一个团队领导(即员工)作为一个客户的联系人。