【发布时间】:2021-04-24 05:34:16
【问题描述】:
您好,我有几个实体类如下,使用 lombok 作为 getter 和 setter
父实体类有
@Table(name = "PARTY")
@Entity
public class Party {
@Id
@Column(name = "PARTY_ID")
private Long partyId;
@OneToMany(targetEntity = DVLoanParticipants.class,cascade = CascadeType.ALL)
@JoinColumn(name = "PARTY_ID")
@MapKey(name="dvpParticipantName")
@LazyCollection(LazyCollectionOption.FALSE)
private Map<String, DVLoanParticipants> dvLoanParticipantsMap;
}
子实体类有
@Table(name = "DV_LOAN_PARTICIPANTS")
@Entity
public class DVLoanParticipants implements Serializable {
@Id
@Column(name = "PARTY_ID")
private Long partyId;
@Id
@Column(name = "DVP_PARTICIPANT_NAME")
private String dvpParticipantName;
@Column(name = "DVP_PARTICIPANT_TYPE")
private String dvpParticipantType;
}
在服务类中,我将保存操作调用为
repository.save(parentEntityObject);
我能够执行更新语句,但是当我尝试为子实体类插入新行时,我收到一个错误提示
cannot insert NULL into ("ABC"."DV_LOAN_PARTICIPANTS"."PARTY_ID")
但如果我在保存操作之前打印 parentEntityObject,我会看到类似的值
(partyId=12345678, dvpParticipantName=XYZ, dvpParticipantType=VKP)
我看到查询格式为
insert
into
DV_LOAN_PARTICIPANTS
(DVP_PARTICIPANT_TYPE, PARTY_ID, DVP_PARTICIPANT_NAME)
values
(?, ?, ?)
就在保存之前,我在对象中看到了值
Builder=DVLoanParticipants(partyId=123456, dvpParticipantName=Builder,
dvpParticipantType=Individual)
更新
这是值的设置部分
DVLoanParticipants dvLoanParticipants = new
DVLoanParticipants();
dvLoanParticipants.setPartyId(Long.valueOf(partyId));
dvLoanParticipants.setDvpParticipantName("Builder");
dvLoanParticipants.setDvpParticipantType("Individual");
Party party = new Party();
Map<String, DVLoanParticipants> dvLoanParticipantsMap = new
java.util.HashMap<>();
dvLoanParticipantsMap.put("Builder", dvLoanParticipants);
party.setPartyId(Long.valueOf(partyId));
party.setDvLoanParticipantsMap(dvLoanParticipantsMap);
repository.save(party);
我做错了什么?
【问题讨论】:
-
这是单向关联还是双向关联?
-
这也不清楚您的域模型的哪个类映射到
DV_LOAN_PARTICIPANTS表。 -
它的单向关联,我更新了问题。
-
有各种问题。 1)如何设置ID? 2) 你有一个复合主键,但没有 IdClass。
-
(1) 我没有手动设置 ID。但我能够更新参与者表中的值,但只有插入失败。 (2) 我相信即使没有 id 类它也应该可以工作,相反我可以设置两个 id 属性。
标签: spring hibernate spring-mvc jpa