jpa继承和服务类中的代码重用

时间:2011-09-19 18:15:20

标签: java jpa

我有一个父实体,Person和两个子实体:Caller和Employee。这两个孩子共享很多字段,所以我用单表策略和鉴别器列实现了JPA继承。所以这么好。 为了处理这些对象,我有一些Service类来处理数据库操作,其中我有以下方法: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");
   //............
}

或者您如何建议我处理这个问题? 感谢

1 个答案:

答案 0 :(得分:1)

如果你的问题只是设置100个commonProperties,你可以添加辅助方法,比如说

 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;
    }