Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 联合继承策略-Hibernate的好替代方案?_Java_Hibernate_Jpa - Fatal编程技术网

Java 联合继承策略-Hibernate的好替代方案?

Java 联合继承策略-Hibernate的好替代方案?,java,hibernate,jpa,Java,Hibernate,Jpa,我目前正在做一个项目,我们有一个“联合继承”数据库表设置。设置基本上类似于以下内容: 其中,每个子表中的记录与父表具有一对一的关系。现在,只有几个子表,但将来可能会有更多子表 我知道使用JPA/Hibernate可以很容易地做到这一点,但我的团队并不热衷于使用它 以下是我不使用Hibernate的解决方案: public interface PersonDao<T> { T create(T t); // other methods omitted for brevit

我目前正在做一个项目,我们有一个“联合继承”数据库表设置。设置基本上类似于以下内容:

其中,每个子表中的记录与父表具有一对一的关系。现在,只有几个子表,但将来可能会有更多子表

我知道使用JPA/Hibernate可以很容易地做到这一点,但我的团队并不热衷于使用它

以下是我不使用Hibernate的解决方案:

public interface PersonDao<T> {

  T create(T t);

  // other methods omitted for brevity
}

public class EmployeeDao implements PersonDao<Employee> {

  private static final String CREATE_SQL = "INSERT INTO EMPLOYEE...";

  @Override
  public Employee create(Employee employee) {
    // create Employee
  }
}

public class OwnerDao implements PersonDao<Owner> {
  /* same pattern as EmployeeDao */
}

public class PersonDaoFactory {

  public PersonDao dao(String type) {
    if (type.equals("OWNER")) {
      return new OwnerDao();
    } else if (type.equals("EMPLOYEE")) {
      return new EmployeeDao();
    }

    throw new RuntimeException("Could not find DAO for type '" + type + "'");
  }
}
PersonDao公共接口{
T创建(T);
//为简洁起见,省略了其他方法
}
公共类EmployeeDao实现PersonDao{
私有静态最终字符串CREATE_SQL=“插入员工…”;
@凌驾
公共雇员创建(雇员){
//创建员工
}
}
公共类所有者道实现PersonDao{
/*与EmployeeDao的模式相同*/
}
公营人员工厂{
公共人物道道(字串式){
if(类型等于(“所有者”)){
返回新的所有者道();
}else if(类型等于(“员工”)){
返回新员工EAO();
}
抛出新的RuntimeException(“找不到类型“+”的DAO”);
}
}

我的问题是,在可维护性和良好设计方面,是否有更好的解决方案,而不使用类似于Hibernate的ORM?与使用Hibernate时相比,添加新类型似乎是一项相当大的工作。

为什么团队不想使用Hibernate?如果数据库模式只有几个表,那么手工编写查询是合理的,但是如果有很多表,您很可能最终编写自己的ORM,这不是一个好主意。Martin Fowler对这一主题有很好的理解。@MickMememonic-团队中没有人(除了我)有使用它的经验,我们的许多应用程序都没有使用任何形式的ORM,因此其他人非常不愿意采用它。有些人还认为这是过分的。我已经消除了他们对此的大部分疑虑,但我也想调查一下最好的案例替代方案,我似乎找不到关于这个特定案例的更多信息。也谢谢你的文章,我来看看!为什么团队不想使用Hibernate?如果数据库模式只有几个表,那么手工编写查询是合理的,但是如果有很多表,您很可能最终编写自己的ORM,这不是一个好主意。Martin Fowler对这一主题有很好的理解。@MickMememonic-团队中没有人(除了我)有使用它的经验,我们的许多应用程序都没有使用任何形式的ORM,因此其他人非常不愿意采用它。有些人还认为这是过分的。我已经消除了他们对此的大部分疑虑,但我也想调查一下最好的案例替代方案,我似乎找不到关于这个特定案例的更多信息。也谢谢你的文章,我来看看!