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 - Fatal编程技术网

Java 为什么不在hibernate中插入外键

Java 为什么不在hibernate中插入外键,java,hibernate,Java,Hibernate,我有两个实体。员工和地址。该实体之间的关系为@OneToOne。当我想插入数据库时,外键不能插入表中。 我的实体是: @Entity @Table(name="Address") public class Address{ @Id @Column(name="Id") private int Id; @OneToOne(fetch=FetchType.LAZY) @JoinColumn(name="emp_id", insertable=true

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

  @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);
是否应指定数据库表中的外键?

您只需要在关系的拥有方使用@JoinColumn。所以,若在数据库中有从地址表、列emp_id到Employee表、列id的外键,那个么映射应该如下所示

地址

雇员


你错过了外宾的@manytonekey@indian我不完全明白你的意思。你能分享你的DB表结构吗?它工作正常。谢谢你的关注。
@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;