为什么没有在hibernate中插入外键

时间:2014-11-10 09:43:16

标签: java hibernate

我有两个实体。员工和地址。这些实体之间的关系是@OneToOne。当我想插入db时,外键不能插入表中。 我的实体是:

  @Entity
  @Table(name="Address")
  public class Address{

  @Id
  @Column(name="Id")
  private int Id;

 @OneToOne(fetch=FetchType.LAZY)
 @JoinColumn(name="emp_id", 
        insertable=true, updatable=false, 
        nullable=true)
 private Employee  employee ;  

和员工实体

 @Entity
 @Table(name="EMPLOYEE")
 public class Employee{

@Id 
@GeneratedValue
@Column(name="emp_id")
private int emp_id;


@OneToOne(fetch =FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="emp_id", 
       insertable=true, updatable=false, 
       nullable=true)
private Address address; 

和添加员工的代码

Employee employee = new Employee("john" , ... );
Address address = new Address("USA" , ...);
employee.setAddress(address);
address.setEmployee(employee);
employeeService.addEmployee(employee);

是否应指定数据库表中的外键?

1 个答案:

答案 0 :(得分:0)

你只需要在关系的拥有方@JoinColumn。因此,如果在数据库中您有Address表,列emp_idEmployee表,列id的外键,则映射应该如下所示

<强>地址

@Entity
@Table(name="Address")
public class Address {

    ...

   @OneToOne(fetch=FetchType.LAZY)
   @JoinColumn(name="emp_id", 
        insertable=true, updatable=false, 
        nullable=true)
   private Employee  employee ;  

<强>员工

@Entity
@Table(name="EMPLOYEE")
public class Employee{

    ...

    @OneToOne(fetch =FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "employee")
    private Address address; 
相关问题