您的位置:首页 > 其它

HQL (九) 连接查询

2010-05-02 15:46 363 查看
http://wlh269.javaeye.com/blog/322050

连接查询(重要)
* 内连接
* 外连接(左连接/右连接)
参见:JoinQueryTest.java

内连接有三种:inner join ,join,“=”

Java代码



package com.wlh.hibernate;

import java.util.Iterator;

import java.util.List;

import junit.framework.TestCase;

import org.hibernate.Session;

public class JoinQueryTest extends TestCase{

/**

* 内联结

*/

public void testQuery1() {

Session session = null;

try {

session = HibernateUtils.getSession();

session.beginTransaction();

//====关键字join==========//

List students=session.createQuery("select s.name ,c.name from Student s join s.classes c").list();

for(Iterator iter=students.iterator();iter.hasNext();){

Object [] o=(Object [])iter.next();

System.out.println("id="+o[0]+",o[1]"+o[0]);

}

session.getTransaction().commit();

}catch(Exception e) {

e.printStackTrace();

session.getTransaction().rollback();

}finally {

HibernateUtils.closeSession(session);

}

}

/**

* 内联结

*/

public void testQuery2() {

Session session = null;

try {

session = HibernateUtils.getSession();

session.beginTransaction();

//=======关键字inner join 默认就是内连接,所以inner可以加上,也可以省略======//

List students=session.createQuery("select s.name, c.name from Student s inner join s.classes c").list();

for(Iterator iter=students.iterator();iter.hasNext();){

Object [] o=(Object [])iter.next();

System.out.println("id="+o[0]+",o[1]"+o[0]);

}

session.getTransaction().commit();

}catch(Exception e) {

e.printStackTrace();

session.getTransaction().rollback();

}finally {

HibernateUtils.closeSession(session);

}

}

/**

* 内联结

*/

public void testQuery3() {

Session session = null;

try {

session = HibernateUtils.getSession();

session.beginTransaction();

//===========用"="实现内联===========//

List students=session.createQuery("select s.name ,c.name from Student s ,Classes c where s.classes.id=c.id").list();

for(Iterator iter=students.iterator();iter.hasNext();){

Object [] o=(Object [])iter.next();

System.out.println("id="+o[0]+",o[1]"+o[0]);

}

session.getTransaction().commit();

}catch(Exception e) {

e.printStackTrace();

session.getTransaction().rollback();

}finally {

HibernateUtils.closeSession(session);

}

}

[color=red]外联接:能够查出2个表之间不相互关联的记录[/color]

<PRE class=java name="code"></PRE>

<BR>

<BR> /**

<BR> * 外联结

<BR> */

<BR> public void testQuery4() {

<BR> Session session = null;

<BR> try {

<BR> session = HibernateUtils.getSession();

<BR> session.beginTransaction();

<BR> //查询出所有的学生(包括没有班级的学生)

<BR> List students=session.createQuery("select s.name ,c.name from Student s left join s.classes c").list();

<BR> for(Iterator iter=students.iterator();iter.hasNext();){

<BR> Object [] o=(Object [])iter.next();

<BR> System.out.println("id="+o[0]+",o[1]="+o[1]);

<BR> }

<BR> session.getTransaction().commit();

<BR> }catch(Exception e) {

<BR> e.printStackTrace();

<BR> session.getTransaction().rollback();

<BR> }finally {

<BR> HibernateUtils.closeSession(session);

<BR> }

<BR> }

<BR>

<BR>

<BR>

<BR> /**

<BR> * 外联结

<BR> */

<BR> public void testQuery5() {

<BR> Session session = null;

<BR> try {

<BR> session = HibernateUtils.getSession();

<BR> session.beginTransaction();

<BR> //查询出所有的班级,(包括没有学生的班级)

<BR> List students=session.createQuery("select s.name ,c.name from Student s right join s.classes c").list();

<BR> for(Iterator iter=students.iterator();iter.hasNext();){

<BR> Object [] o=(Object [])iter.next();

<BR> System.out.println("id="+o[0]+",o[1]="+o[1]);

<BR> }

<BR> session.getTransaction().commit();

<BR> }catch(Exception e) {

<BR> e.printStackTrace();

<BR> session.getTransaction().rollback();

<BR> }finally {

<BR> HibernateUtils.closeSession(session);

<BR> }

<BR> }

<BR>

<BR>

<BR>}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: