我有 2 类 Employee 和 Passport,然后我尝试使用注释创建主键和外键关系的一对一映射,但 Passport 表中没有发生外键关系。
这里Primary_Id是Employee表中的Emp_No,并且必须是Passport表中的外键。
下面我提供了 Employee 和 Passport 的 2 个 POJO 类以及从 Hibernate 生成的 SQL。
有人可以帮我解决我犯的错误吗?如有更多信息,请告诉我。
员工
package com.otr.hibernate;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
/**
*
* @author SPAR
*/
@Entity
public class Employee implements Serializable {
@Id
private String emp_No;
private String first_Name;
private String second_Name;
private String designation;
public String getEmp_No() {
return emp_No;
}
public void setEmp_No(String emp_No) {
this.emp_No = emp_No;
}
public String getFirst_Name() {
return first_Name;
}
public void setFirst_Name(String first_Name) {
this.first_Name = first_Name;
}
public String getSecond_Name() {
return second_Name;
}
public void setSecond_Name(String second_Name) {
this.second_Name = second_Name;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
}
Passport.java
package com.otr.hibernate;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
/**
*
* @author SPAR
*/
@Entity
public class Passport implements Serializable {
private String passport_No;
@Id @GeneratedValue(generator = "foreign")
@GenericGenerator(name= "foreign", strategy = "foreign", parameters = {@Parameter(value = "employee", name = "property")})
private String emp_RN_No;
@OneToOne (cascade = CascadeType.ALL)
@JoinColumn(name = "emp_RN_No")
private Employee employee;
public String getPassport_No() {
return passport_No;
}
public void setPassport_No(String passport_No) {
this.passport_No = passport_No;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public String getEmp_No() {
return emp_No;
}
public void setEmp_RN_No(String emp_No) {
this.emp_No = emp_No;
}
}
hibernate 一代
Hibernate: create table Employee (emp_No varchar(255) not null, designation varchar(255), first_Name varchar(255), second_Name varchar(255), primary key (emp_No));
Hibernate: create table Passport (emp_No varchar(255) not null, passport_No varchar(255), primary key (emp_No));
最佳答案
您不需要 GenericGenerator 来执行此操作。有两种更简单的选择:
组合@Id和@OneToOne:
@Id @OneToOne (cascade = CascadeType.ALL) @JoinColumn(name = "emp_RN_No") private Employee employee;
确保删除之前的 @Id 属性
emp_RN_No
使用@MapsId:
@Id private String emp_RN_No; @MapsId @OneToOne @JoinColumn(name = "emp_RN_No") private Employee employee;
关于java - 通过 Hibernate 注解创建外键关系的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27675597/