hibernate处置多表连接查询

hibernate处理多表连接查询
      如果我们在Hibernate中需要查询多个表的不同字段,那么如何来获取Hibernate多表查询的结果呢?有两种方式: 对各个字段分别转化成对应类型;构造自己的复合类型。

      如果我们在Hibernate中需要查询多个表的不同字段,那么如何来获取Hibernate多表查询的结果呢?有两种方式:

      1、 对各个字段分别转化成对应类型,如下:

      Java代码:

         1. Query q = session.createQuery(" select members, classInfo.className " +      
         2.     " from Members members, ClassInfo classInfo " +      
         3.     " where members.level = classInfo.classCode ");         
         4. List result = q.list();      
         5. Iterator it = result.iterator();      
         6. while (it.hasNext()) {      
         7.    Object[] tuple = (Object[]) it.next();      
         8.    Members members = (Members) tuple[ 0 ];      
         9.    String className = (String) tuple[ 1 ];      
        10. }    
        11. Query q = session.createQuery
        12. (" select members, classInfo.className " +
        13. " from Members members, ClassInfo classInfo " +
        14. " where members.level = classInfo.classCode ");
        15.  List result = q.list(); Iterator it = result.iterator();
        16.  while (it.hasNext()) { Object[] tuple = (Object[]) it.next();
        17. Members members = (Members) tuple[ 0 ];
        18. String className = (String) tuple[ 1 ]; }

      这是获取Hibernate多表查询的结果的最常用的方式。

      2、构造自己的复合类型,如下:

      Java代码:

         1. Query q = session.createQuery
         2. (" select new NewMembers(members, classInfo.className) " +      
         3.     " from Members members, ClassInfo classInfo " +      
         4.     " where members.level = classInfo.classCode ");    
         5. Query q = session.createQuery
         6. (" select new NewMembers(members, classInfo.className)
         7.  " + " from Members members, ClassInfo classInfo " + "
         8. where members.level = classInfo.classCode "); 

      当然我们需要有一个NewMembers类和相应的构造方式。以上便是两种用于获取Hibernate多表查询的结果的方法以及其相应的代码。