Hibernate对多个表进行查询,结果集的处理方式

Hibernate对多个表进行查询时,

 

查询结果是多个表的笛卡尔积,或者称为“交叉”连接。例如:

from Student, Book

from Student as stu, Book as boo

from Student stu, Book boo

注意:让查询中的StudentBook均是表studentbook对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。别名应该服从首字母小写的规则是一个好习惯,这和Java对局部变量的命名规范是一致的。

建议通过MyEclipse进行生成这样就不会出太多的错注意表名要与类名同名

下面列举一个完整的例子来说明Hibernate对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表tBookInfoBookSelection的结构和其对应的hbm.xmlclass文件就不一一列举了,有需要详细了解的朋友,请联系我):
String sTest = "from tBookInfo book, BookSelection sel where book.id = sel.bookId";
        Collection result 
= new ArrayList();
        Transaction tx 
= null;
        
try {
            Session session 
= HibernateUtil.currentSession();
            tx 
= session.beginTransaction();
            Query query 
= session.createQuery(sql);
            result 
= query.list();
            tx.commit();
        }
 catch (Exception e) {
            
throw e;
       }
 finally {
            HibernateUtil.closeSession();
        }

        ArrayList sList 
= (ArrayList) result;
      Iterator iterator1 
= sList.iterator();
        
while (iterator1.hasNext()) {
             Object[] o 
= (Object[]) iterator1.next();
             tBookInfo bookInfo 
= (tBookInfo) o[0];
             BookSelection bookSelect 
= (BookSelection) o[1];
             System.out.println(
"BookInfo-Title: " + bookInfo.getTitle());
             System.out.println(
"BookSelection-BookSelectionId: " + bookSelect.getId());
        }

 方法二
public List queryResoursOut() {
        log.debug(
"queryResoursOut instance");
        List list 
= new ArrayList();
        ScrollableResults srs 
= null;
        Session session 
= null;
        
try {
            session 
= getSession();
            srs 
= session.createQuery(
                
"select m.cname , t.cname , o.price , o.quantity "
                
+ "from ResourceModel m, ResourceType t, ResourceExist o"
                
+ " where m.id = o.modid and t.id = o.typeid and m.delflag ='0' and t.delflag = '0' order by o.typeid ").scroll();
            
// 将查询结果放入List保存
            while (srs.next()) {
                list.add(
new ResourceOutTemp(srs.getString(0),
                        srs.getString(
1), srs.getFloat(2), srs.getLong(3)));
            }

        }
 catch (HibernateException he) {
            
if (srs != null{
                
try {
                    srs.close();
                }
 catch (Exception e) {
                    ;
                }

            }

        }
 finally {
            
try {
                session.close();
            }
 catch (Exception e) {
                ;
            }

        }

        
return list;
    }


ScrollableResults 是import org.hibernate.ScrollableResults;
提供的类,它可以为我们定制过虑输出列。
posted @ 2007-03-29 14:54  fhway  阅读(654)  评论(0)    收藏  举报