java - JPA 从父实体填充复合键 id 部分
问题描述
假设我有这两个实体,个人和保险。一个人可以拥有多份保险,保险唯一性由(保险类型、保单编号和人员 ID)的组合键组合维护。下面的代码代表场景......
父类
@Entity
@Setter
@Getter
@RequiredArgsConstructor
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = "GenerationType.IDENTITY")
@Column(name "person_id")
private Long personId;
@Column(name = "fst_nm")
private String fstName;
@Column(name = "lst_nm")
private String lstNm;
// ..Other columns & relationships
@OneToMany(mappedBy = "person")
private List<Insurance> insurances;
public void addInsurance(Insurance toAdd) {
getInsurances().add(toAdd);
toAdd.setPerson(this);
}
}
儿童班
@Entity
@Setter
@Getter
@RequiredArgsConstructor
public class Insurance implements Serializable {
@EmbeddedId
private insurancePK id;
//other data
@ManyToOne
@MapsId("personId")
private Person person;
}
复合PK类
@Setter
@Getter
@Embeddable
public class InsurancePK implements Serializable {
@Column(name = "person_id", insertable = false, updatable = false)
private Long personId;
@Column(name = "insurance_type")
private String insuranceType;
@Column(name = "pol_num")
private String polNum;
}
现在,我的数据映射器看起来像这样......
Person newPerson = new Person();
newPerson.setInsurances(new ArrayList<>());
// fill out Person Model data
// incoming insurance data
while (incomingData.hasNext()) {
Insurance insuranceData = new Insurance();
InsurancePK pk = new InsurancePK();
// set other insurance data
pk.setInsuranceType("Dental");
pk.setPolNum("123Abc00");
insuranceData.setId(pk);
person.addInsurance(insuranceData);
}
问题是我在复合键中的 person_id 总是得到一个空值,不知道为什么(@MapsId 不应该处理那个值)?我需要动态获取该值,大多数 JPA 复合键解决方案只是手动设置所有值,但这不是我的场景。
从 saveAndflush() 返回对象
{
person: {
person_id: 55,
fst_nm: blah,
lst_nm: blah,
insurances: [
{
insurance_pk: {
person_id: null,
insurance_type: "Dental",
pol_num: "123Abc00"
}
//other insurance data
}
]
}
}
关于我缺少什么的任何建议?先感谢您!
解决方案
从.
@Column(name = "person_id", insertable = false, updatable = false)
_InsurancePK.personId
添加以下注释:
@JoinColumn(name = "name = "person_id"")
到Insurance.person
.
推荐阅读
- typo3 - TYPO3 Powermail 确认登录的前端用户电子邮件
- database - PGSQL - 额外数据列
- reactjs - 将所有资产导入到一个 images.js 文件中,然后导出为一个对象
- spring - 使用 @SpringBootTest 的集成测试没有选择使用 spring.factories 配置的库的自动配置
- php - Visual Composer / WPBakery 中的 attach_image 参数允许选择多个图像
- docker - 尝试通过 Nginx 访问 Gitlab 时 Nginx 502 Bad Gateway
- html - 在 iframe 中渲染 pdf 时,IE 11 在短时间内没有响应
- codenameone - ITMS-90339:弃用的 Info.plist 键
- gulp - Gulp - 何时返回值,何时不返回
- filter - 创建自定义过滤器