两张表部门和员工,一对多的关系,现在查找10个部门和他们包含的员工。这个不难,问题是如何映射到MODEL中,比如返回一个List<Department> departments;在Department 中包含复合属性List<Employee> employees;如何把SQL的结果集映射进去。PS:有种方法是取到10个部门,用每个部门的ID,找到他们的员工,再SET进 employees中,但这样不是就需要查询11次,才能返回需要的结果,太没效率了。     求解 

解决方案 »

  1.   

    用object  里面是2个list 就ok了
      

  2.   

    对数据库查询的只有一句,会返回部门ID号相同的员工列表,逐个加个到集合中即可List<Employee> emps = new ArrayList<Employee>();
    Employee emp = null ;
    String sql = "select id,name from employee where deptNo=10" ;
    PreparedStatement ps = Connection.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
    emp = new Employee();
    user.setId(rs.getInt(1));
    user.setName(rs.getString(2));
    emps.add(user);
    }
      

  3.   

    貌似没有理解我的意思,我需要返回List<Department> departments;不是 employees;
      

  4.   

    可以通过hibernate配置,利用一条语句得到结果。但是太麻烦,我没有配。我的做法是: List<Department> departments= jt.query("SQL语句",
            ParameterizedBeanPropertyRowMapper.newInstance(Department.class));这个可以得到结果,但是只能把基本属性映射进去,对于Department中包含的复合属性List<Employee> employees,是做不到的。说以返回的结果中,每个Department中employees,都是NULL。
      

  5.   

    楼主既然用到了hibernate,并且映射了一对多的关系,当你查询department的时候就会同时查询出对应的员工集合(当然这里必须是你设置了抓取策略为即时加载,而非赖加载)当你用session.createQuery("select d from Department d where d.id in(:ids)")
    .setParameterList("ids", Arrays.asList(new int[]{1,2,3,4,5,6,7,8,9,10}))
    .list();
    就是返回的List<Department>集合对象并且里面每个department对象下都可以取得对应的List<Employee> employees的属性的,
      

  6.   

    ibatis支持符合查询的,但是我觉得这样做没有多大意义,一张表对应一个实体就好了吧。部门对应Department实体selectDepartmentById();员工对应Employee实体。selectEmployeeById();
    selectEmployeeByDepartmentId();
    这样你要部门有部门,要员工有员工.......
      

  7.   

    我的HIBERNATE中没有配置一对多的关系,因为觉得没有必要,就想6楼说的。这个问题我已经解决了,自己把结果集封装了。。