我想使用 Spring Data JDBC 和 PostgreSQL 对一对一关系进行建模,但我无法以正确的方式设置根聚合。
有以下场景:图片,SQL
每个引擎都是唯一的,car
有唯一的列engine_id
是 的外键engine.id
,同样适用truck
。因此汽车和卡车应该是根聚合,所以当汽车或卡车被删除时,引擎表中的引用行也应该被删除。
根据我对Spring Data JDBC Aggregates的理解
如果多个聚合引用同一个实体,则该实体不能是引用它的那些聚合的一部分,因为它只能是一个聚合的一部分。
所以问题是:
- 由于上面的解释,解决方法是否可行,以便通过执行 CRUD 操作
car
并将truck
更改也反映到engine
? - 使用 Spring Data JDBC 在 java 中实现这种关系的最佳方法是什么?
这是我的看法,它不起作用,但应该澄清我想要完成的事情。
汽车.java
package com.example.dao.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Persistable;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import java.util.UUID;
@Table("car")
public class Car implements Persistable<UUID> {
@Id
private UUID id;
String brand;
String model;
@Column("engine_id")
Engine engine;
public void setId(UUID id) {
this.id = id;
}
@Override
public UUID getId() {
return id;
}
@Override
public boolean isNew() {
return id == null;
}
}
引擎.java
package com.example.dao.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Persistable;
import org.springframework.data.relational.core.mapping.Table;
import java.time.LocalDateTime;
import java.util.UUID;
@Table("engine")
public class Engine implements Persistable<UUID> {
@Id
private UUID id;
String name;
LocalDateTime dateCreated;
String type;
public void setId(UUID id) {
this.id = id;
}
@Override
public UUID getId() {
return id;
}
@Override
public boolean isNew() {
return id == null;
}
}
卡车.java
package com.example.dao.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Persistable;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import java.util.UUID;
@Table("truck")
public class Truck implements Persistable<UUID> {
@Id
private UUID id;
String brand;
String model;
Integer cargoMaxWeight;
String truckType;
@Column("engine_id")
Engine engine;
public void setId(UUID id) {
this.id = id;
}
@Override
public UUID getId() {
return id;
}
@Override
public boolean isNew() {
return id == null;
}
}