以下是场景:Picture, SQL
每个引擎都是独特的,
car
具有唯一列engine_id
,该列是engine.id
的外键,truck
同样如此。因此,汽车和卡车应该是根聚合,因此当删除汽车或卡车时,引用的引擎表中的行也应该被删除。从我对Spring Data JDBC Aggregates的理解来看,
所以问题是:如果多个聚合引用相同的实体,则该实体不能是引用它的那些聚合的一部分,因为它只能是恰好一个聚合的一部分。
- 由于上述解释,是否可以通过绕过来进行CRUD操作
car
和truck
以便将更改反映到engine
中? - 使用Spring Data JDBC在Java中实现这种关系的最佳方法是什么?
下面是我的想法,虽然不起作用,但应该可以澄清我想要实现的内容。
Car.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;
}
}
Engine.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;
}
}
Truck.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;
}
}