Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
Spring 弹簧&x2B;休眠一对一映射_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Spring 弹簧&x2B;休眠一对一映射

Spring 弹簧&x2B;休眠一对一映射,spring,hibernate,spring-mvc,Spring,Hibernate,Spring Mvc,我正在使用spring和hibernate开发web应用程序。我正在两个表employee和PersonelDetails之间使用一对一映射 下面是我的bean类 ==================================员工===================================== @Entity @Table(name="employee") public class Employee { @Id @Column @GeneratedValu

我正在使用spring和hibernate开发web应用程序。我正在两个表employee和PersonelDetails之间使用一对一映射

下面是我的bean类

==================================员工=====================================

@Entity
@Table(name="employee")
public class Employee {
    @Id
    @Column
    @GeneratedValue
    private int empid;
    @Column
    private String firstName;
    @Column
    private String lastName;
    @Column
    private String email;
    @Column
    private String password;
    @Column
    private boolean isAdmin;

    @Column
    private boolean isActive;

    @Column
    private boolean isLocked;
//getter setters
@Entity
@Table(name="PersonalDetails")
public class PersonalDetails {
    @Column
    @Id
    private int empid;
    @Column
    private String personalEmail;
    @Column
    private String mob;
    @Column
    private String permenantAdress;
    @Column
    private String currentAddress;
    @Column
    private String gender;
    @Column
    private String maritialStatus;

    @MapsId
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "empid", referencedColumnName = "empid")
    @ForeignKey(name="empid")
    private Employee employee;

//getter setters
@RequestMapping(value="addpersonal")
    public ModelAndView addPersonalDetails(@ModelAttribute("personalDetails") PersonalDetails personalDetails) {
        //personalDetails.setEmpid(1);
        personalDetails.setCurrentAddress("niljyoti");
        personalDetails.setMob("9405715872");
        personalDetails.setPermenantAdress("address");
        Employee e = empService.getEmployeebyUserName(uname);
        personalDetails.setEmployee(e);
        personalDetailsService.addPersonalDetails(personalDetails);
        return new ModelAndView("home");

    }
=====================================个人详细信息类====================

@Entity
@Table(name="employee")
public class Employee {
    @Id
    @Column
    @GeneratedValue
    private int empid;
    @Column
    private String firstName;
    @Column
    private String lastName;
    @Column
    private String email;
    @Column
    private String password;
    @Column
    private boolean isAdmin;

    @Column
    private boolean isActive;

    @Column
    private boolean isLocked;
//getter setters
@Entity
@Table(name="PersonalDetails")
public class PersonalDetails {
    @Column
    @Id
    private int empid;
    @Column
    private String personalEmail;
    @Column
    private String mob;
    @Column
    private String permenantAdress;
    @Column
    private String currentAddress;
    @Column
    private String gender;
    @Column
    private String maritialStatus;

    @MapsId
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "empid", referencedColumnName = "empid")
    @ForeignKey(name="empid")
    private Employee employee;

//getter setters
@RequestMapping(value="addpersonal")
    public ModelAndView addPersonalDetails(@ModelAttribute("personalDetails") PersonalDetails personalDetails) {
        //personalDetails.setEmpid(1);
        personalDetails.setCurrentAddress("niljyoti");
        personalDetails.setMob("9405715872");
        personalDetails.setPermenantAdress("address");
        Employee e = empService.getEmployeebyUserName(uname);
        personalDetails.setEmployee(e);
        personalDetailsService.addPersonalDetails(personalDetails);
        return new ModelAndView("home");

    }
在“我的应用程序”表中,在创建新员工时,管理员用户会填写员工本人(通过登录到管理员创建的帐户填写个人详细信息表)

现在,当我尝试将个人详细信息bean发送到hibernate层时,首先我必须从employee表中获取employee bean,然后通过personalDetails类调用setEmployee方法,将employee bean保存在personalDetails中,并发送到hibernate层以保存在数据库中

所以,当从数据库中获取Employeebean并再次通过personalDetails返回时,bean会导致性能问题

在将数据保存在子表(PersonalDetails)中时,是否有人可以帮助澄清传递父对象(Employee)是否确实是必需的

===============================存储个人详细信息的代码===============

@Entity
@Table(name="employee")
public class Employee {
    @Id
    @Column
    @GeneratedValue
    private int empid;
    @Column
    private String firstName;
    @Column
    private String lastName;
    @Column
    private String email;
    @Column
    private String password;
    @Column
    private boolean isAdmin;

    @Column
    private boolean isActive;

    @Column
    private boolean isLocked;
//getter setters
@Entity
@Table(name="PersonalDetails")
public class PersonalDetails {
    @Column
    @Id
    private int empid;
    @Column
    private String personalEmail;
    @Column
    private String mob;
    @Column
    private String permenantAdress;
    @Column
    private String currentAddress;
    @Column
    private String gender;
    @Column
    private String maritialStatus;

    @MapsId
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "empid", referencedColumnName = "empid")
    @ForeignKey(name="empid")
    private Employee employee;

//getter setters
@RequestMapping(value="addpersonal")
    public ModelAndView addPersonalDetails(@ModelAttribute("personalDetails") PersonalDetails personalDetails) {
        //personalDetails.setEmpid(1);
        personalDetails.setCurrentAddress("niljyoti");
        personalDetails.setMob("9405715872");
        personalDetails.setPermenantAdress("address");
        Employee e = empService.getEmployeebyUserName(uname);
        personalDetails.setEmployee(e);
        personalDetailsService.addPersonalDetails(personalDetails);
        return new ModelAndView("home");

    }
宣读:

如果担心的话,您可以更改获取策略。 基于od JPA规范,
@OneToOne
的默认获取类型为
EAGER

通过设置
fetch=FetchType.LAZY
,而不是real
PersonalDetails
对象,将返回作为代理的子类的对象。因此,只有在调用了
getEmployee
之后,才能从
employee
表中进行选择

书面:

您需要指定实体之间的连接,在您的模型中,唯一的方法是
employee
字段。但是,您可以指定
mappedBy
,请参阅此问题的答案:


哪个代码导致了哪个性能问题?发布代码而不是描述它。