Spring 弹簧&x2B;休眠一对一映射
我正在使用spring和hibernate开发web应用程序。我正在两个表employee和PersonelDetails之间使用一对一映射 下面是我的bean类 ==================================员工=====================================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
@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
,而不是realPersonalDetails
对象,将返回作为代理的子类的对象。因此,只有在调用了getEmployee
之后,才能从employee
表中进行选择
书面:
您需要指定实体之间的连接,在您的模型中,唯一的方法是employee
字段。但是,您可以指定mappedBy
,请参阅此问题的答案:
哪个代码导致了哪个性能问题?发布代码而不是描述它。