【发布时间】:2015-01-30 06:34:33
【问题描述】:
我有 2 个具有一对一关系 Employer 和 EmployerDetails 的实体,如下所示:
雇主
public class Employers {
@Id //signifies the primary key
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "employerDetials_id")
private EmployerDetails employerDetails;
}
雇主详情
public class EmployerDetails {
@Id
@Column(name = "employerDetails_id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long employerDetails_id;
private Long address;
}
据我所知,更新Employer,EmployerDetails 应该因为cascadeType.All 而更新
更新雇主代码
public void update(Long id) {
this.setId(id);
JPA.em().merge(this);
}
我的问题是当我调用上述函数时会发生什么
insert into EmployerDetails(id,address) values(1,"newaddress"); then
update Employer set employerDetails_id=1;
我对@987654328@ 的理解是它确实是(PERSIST,MERGE,REMOVE,DELETE etc),所以EmployerDetails 应该更新而不是在更新Employer 时插入(如果我错了,请纠正我)。
因此,每次我更新 Employer 时,都会在 EmployerDetails 中创建一个新行,并使用新的 employerDetails_id 更新 Employer 而不影响(未删除未更新)EmployedDetails 中的先前行。
是不是我做错了什么?
谢谢
【问题讨论】:
-
@hragheb 这是我的实际代码。我删除了其他字段并只发布了所需的代码
-
Employers 的 PK 是什么。update() 方法在哪里?
-
@hragheb 抱歉忘记在上面的代码中将 id 输入到雇主中,更新我的问题
-
downvoter 关心解释?
标签: java jpa playframework playframework-2.2 one-to-one