【发布时间】:2021-12-16 22:54:51
【问题描述】:
我有这种情况:
@Entity
public class AggregateA {
private String fieldA;
//around 15 simple fields similar to fieldA
@OneToMany(mappedBy = "entityFieldA", fetchType= FetchType.EAGER)
private Set<EntityA> entitiesList;
void updateAggregate() {
//chose appropriate entity from the list and delegate updating to the `EntityA` class.
EntityA ent = getSomehow();
ent.updateField2();
}
}
@Entity
class EntityA {
private String entityFieldA;
private String entityFieldB;
//few more simple fields here
void updateField2() {
//set appropriate field
}
}
我想使用updateAggregate 更新EntityA 内的一些字段(因为我想通过聚合更新所有实体)但问题是如果我通过数据库获取聚合,我将获取这 15 个简单字段,而且我将与实体表连接,这会使性能复杂化。在此之前,有相当简单的贫血解决方案。 EntityA 有存储库,因此我们在完全不知道该更新的情况下获取实体并更新它们。在这种情况下,我们没有获取聚合,连接也没有。我们只获取实体对象列表并更新它们。
我认为也许 spring 数据投影可以帮助我,但在这种情况下,我需要创建新接口(使用我想要获取的字段),在这种情况下,我还将我的业务逻辑传播到数百万个地方。
有没有优雅的 DDD 方法来解决这个问题?我是否应该将数据层与业务 DDD 层解耦?
【问题讨论】:
标签: java hibernate jpa domain-driven-design