簡體   English   中英

服務類中的jpa繼承和代碼重用

[英]jpa inheritance and code reuse in service classes

我有一個父實體,Person和兩個子實體:Caller和Employee。 這兩個孩子共享許多字段,因此我使用單表策略和區分符列實現了JPA繼承。到目前為止,一切都很好。 為了處理這些對象,我有一些服務類來處理數據庫操作,其中我有如下方法:getCallerById(); 或getEmployeesByFirstName()。 同樣,save()方法也位於這些服務類中。 問題是,當我想保存一名雇員或呼叫者時,我得到了很多重復的代碼(用於所有共享屬性),因此為了防止這種情況,我創建了第三項服務:PersonService()以處理常見問題功能。 但是現在我不知道如何使用此服務來重用盡可能多的代碼。 也許在PersonService()中有類似

public Boolean save(Person p){
    if (p instanceOf Caller){
       Caller c = new Caller();
       c.setCallerSpecificProperty("XXX");
    }

    if (p instanceOf Employee){
      Employee c = new Employee()
      c.setEmployeeSpecificProperty("YYY");
    }

    c.setOtherCommonParameter("ccc");
   //............
}

或您如何建議我處理此問題??? 謝謝

如果您的問題只是設置Person的100個commonProperties,則可以添加helper方法,例如

 protected Person setCommonProperties(Person p){
p.setFoo(foo);
p.setBar(bar);
...
p.setWhatever(blahblah);

return p;
}

在您的parentService中(在您的情況下為PersonService)

在子類中(例如CallerService),

   boolean save(){
     Caller caller = new Caller();
    caller = setCommonProperties(caller);
    caller.setCallerPropertyA(...);
    caller.setCallerPropertyB(...);

    ...

    //save caller
return true or false;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM