如何解决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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。