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