[英]How can I persist complex entity with Strategy objects in JPA?
我正在使用Spring boot JPA开发DDD项目。 我使用基于注释的orm将域对象保留在DAO中。 但是现在域模型已经变得如此复杂,以至于我考虑对域实体执行策略模式。
这是一个例子:
@Entity
class ComplexEntity {
@Id
private String id;
// ... other simple fields
// Example of a strategy object
// Which deals with complex logics
private StrategyObject strategyObject;
// Business methods here
public void doLogic(OtherEntity other) {
strategyObject.performOn(other);
// other logics...
}
}
当我像这样重构域对象时,orm变成了一个严重的问题,我几乎无法处理。 有什么解决方案可以保留这种复杂的域实体吗?
不幸的是,JPA无法做到这一点,但是Hibernate支持这种可能性。
我会创建一个枚举
public enum Strategy {
public abstract StrategyObject getImplementation();
STRATEGY_1 {
public StrategyObject getImplementation() {
return new Strategy1();
},
STRATEGY_2 {
public StrategyObject getImplementation() {
return new Strategy2();
}
}
然后引用您实体中的策略枚举:
@Entity
class ComplexEntity {
@Id
private String id;
@Enumerated(EnumType.STRING)
private Strategy strategy;
public void doLogic(OtherEntity other) {
strategy.getImplementation().performOn(other);
}
}
编辑:我想我错过了该策略可能具有大量需要存储的配置的部分。 但这也许是一个开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.