繁体   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