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>}
连接查询(重要)
* 内连接
* 外连接(左连接/右连接)
参见: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>}
相关文章推荐
- 使用hql查询---6.4.3: 关联和连接
- hibernate系列十五:hql连接查询,查询性能优化,hql批量增删改
- hql关联和连接查询实例
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- 在hibernate中hql语句使用连接查询
- hibernate——HQL(二)简单的连接查询、隐式连接、显示连接
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- Hibernate-HQL查询(2)子查询、连接查询
- 关于Hibernate、NHibernate的 HQL 连接字段,字段拼接查询问题
- hibernate_day04_13_HQL多表查询(内连接和迫切内连接)
- hibernate_day04_14_HQL多表查询(左外连接和迫切左外连接)
- HQL实现多表连接+多条件查询
- HQL 连接查询
- Hql连接查询的两个错误(Path expected for join!和unexpected token on)
- HQL查询-分页-条件-连接-过滤使用
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- Hibernate批量处理数据、HQL连接查询
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- hql 多表连接查询
- HQL连接查询