Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在hibernate中实现一对一的外键关系映射_Java_Hibernate_Jsp_Hibernate Mapping - Fatal编程技术网

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只能分配给一个客户。这里的最佳方法是什么?这是一个值得关注的问题。我认为这很合适。关于员工的独特性,我认为这不符合您的需要。请检查。是否有其他替代映射,我可以使用它来代替
,因为我需要一个团队领导(即员工)作为一个客户的联系人。