簡體   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