繁体   English   中英

如何在JPA中使用策略对象保留复杂的实体?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM