OneToOne 映射 JPA - Cascade.All 不复制 id 列

问题描述

我尝试搜索此特定问题,但无法获得任何帮助

在创建员工时 --> 应该创建帐户。

我的实体是 --> Employee 实体

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

    private static final long serialVersionUID = -1798070786993154676L;


    @Id
    @Column(name = "EMPLOYEE_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int EMPLOYEE_id;

    @Column(name = "EMPLOYEE_name")
    private String EMPLOYEE_name;

    @Column(name = "EMPLOYEE_desc")
    private String EMPLOYEE_desc;

    
  
    @OnetoOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "EMPLOYEE_id")
    @MapsId
    private ACCOUNT account;


    // getters and setters 
}

账户实体 -->

    @Entity
@Table(name = "ACCOUNT")
public class ACCOUNT implements Serializable {

    private static final long serialVersionUID = -6790693372846798580L;



    @OnetoOne( fetch = FetchType.LAZY)
    @JoinColumn(name = "EMPLOYEE_id")
    private EMPLOYEE employee

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

    @Column(name = "account_desc")
    private String account_desc;




 // getters setters 
}

在创建员工时 --> 应该创建帐户。

我的 pojo 已正确映射,如下所示 -->

 employee = { EMPLOYEE_id = 0,EMPLOYEE_name = 'abc',EMPLOYEE_desc = 'new employee',account = { account_id = 1,account_desc = 'my account',EMPLOYEE_id = 0  }
        }

因此,当我使用相同的员工对象时 - 它会生成 employee_id ,但帐户表中没有填充相同的 employee_id

它部分工作 --> 在 Account 表 Employee_id 中没有被填充。

我尝试在 stackOverflw 上搜索很多问题 - 但到目前为止都没有运气。 任何帮助表示赞赏。

提前致谢

解决方法

如果在关系的双方都定义了@OneToOne,则一方应该是所有者。那是具有外键的实体。另一边应该有mappedBy 属性。所以以下对我有用

@Entity
@Table(name = "EMPLOYEE")
public class EMPLOYEE implements Serializable {
  @OneToOne(cascade= CascadeType.ALL,mappedBy = "employee") // non-owner side
  private Account account;
  ....
}

@Entity
@Table(name = "ACCOUNT")
public class Account implements Serializable {
  @OneToOne( fetch = FetchType.LAZY)
  @JoinColumn(name = "EMPLOYEE_id") // owner-side
  private Employee employee;
}