【发布时间】:2020-06-24 23:25:46
【问题描述】:
我在对嵌套在聚合根的另一个子实体中的实体集合进行级联持久化操作时遇到问题。换句话说,我试图将一组实体与一个已经在一对多关系的many 端的实体关联起来。
我有一个名为 UniversalRecord 的聚合根,其中包含一个 Reservation 列表,其中又包含一个 Segment 对象列表。
data class UniversalRecord(
val locatorCode: String,
val reservations: Set<Reservation>
) {
@Id var id: UUID? = null
}
data class Reservation(
val locatorCode: String,
val providerCode: String,
val providerLocatorCode: String
val createdDate: String,
val modifiedDate: String,
val cancelled: Boolean = false,
val segments: Set<SegmentRef>
) {
@Id @Column("UNIVERSAL_RECORD") var id: UUID? = null
}
@Table("reservation_segment_ref")
data class SegmentRef(val key: String) {
@Id @Column("RESERVATION") var id: UUID? = null
}
但是当我在 Reservation 实体中引入另一个集合时,即 List 它失败了。
这里是sql:
CREATE TABLE universal_record(
id UUID PRIMARY KEY,
locator_code VARCHAR UNIQUE,
);
CREATE TABLE IF NOT EXISTS reservation(
universal_record UUID,
locator_code VARCHAR,
provider_code VARCHAR(2),
provider_locator_code VARCHAR,
created_date DATETIME,
modified_date DATETIME,
cancelled BOOLEAN
);
CREATE TABLE reservation_segment_ref(
reservation UUID,
segment UUID
);
Spring Data JDBC 可以保存聚合根中包含的实体,并使用生成的键将子实体链接到父实体,当我在子实体中添加另一个列表时失败并出现此错误:
java.lang.IllegalStateException: Couldn't obtain a required id value
我想要达到的目标有可能吗?还是我也需要将 Reservation 转换为聚合根?
谢谢
【问题讨论】:
-
我有一个 ApplicationListener
在保存操作之前为 root 生成 UUID。
标签: spring-data spring-data-jdbc