获取每个层次结构表结构的DAO

时间:2011-07-08 18:38:43

标签: java orm polymorphism dao table-per-hierarchy

假设我有一个User类和两个子类EmployeeCustomer。我将此层次结构实现为DB中的每个层次表,其中包含用于指定用户类型的列。查询此表时,我需要返回正确类型的对象。

我是否需要针对每种类型的对象(例如CustomerDAOEmployeeDAO)使用单独的DAO,因此每个对象都会返回各自的CustomerEmployee对象。如果是这样,如何从DAOFactory获取它们而不使用:

if(type.equlas('customer'))
    return customerDao;
else
    retrun employeeDao;

因为实施User的类型可能会发生变化,我不想每次都改变条件。

或者还有其他方法吗?任何想法都将不胜感激。

注意:我没有使用任何ORM框架,也没有计划使用它。

1 个答案:

答案 0 :(得分:0)

如果每种类型的持久性代码相同,那么您可以拥有1个通用DAO。

所以你的用户dao可能是这样的:

interface DAO<T, ID> {
  T create(T t);
  T read(ID id);
  T update(T t);
  void delete(T t);  
}

class UserDAO<T extends User> implements DAO<T> {
    // Your methods for crud operations will be limited to types of User.
}

然后,您的工厂类可以通过指定正确的类型来实例化正确的DAO。

class DAOFactory {
  public UserDAO<Employee> getEmployeeDAO() {
    return new UserDAO<Employee> ();
  }
}

问候
优素福