Hibernate 本地SQL查询 (三)

2014-11-24 11:10:33 · 作者: · 浏览: 3
tx=session.beginTransaction();
//本地SQL查询
Query query=session.getNamedQuery("findUserHouse");//获取本地查询语句
List result=query.list();
Iterator it=result.iterator();
while(it.hasNext()){
Object[] results=(Object[])it.next();
User user =(User)results[0];
House house=(House)results[1];
System.out.println("用户名:"+user.getName()+" 房屋信息:"+house.getTitle()+user.getTelephone());
}
}catch(HibernateException e){
e.printStackTrace();
}

}

}


如果不在User.hbm.xml配置文件中添加本地sql查询语句,也可以在直接在测试类中添加。

执行本地sql查询将不是使用Query接口了,而是通过SQLQuery接口,使用Session的createSQLQuery(String sql)方法利用传入的sql参数获得SQLQuery实例

在使用这个方法时,还需要传入查询实体类,因此需要SQLQuery的addEntity(String alias,Class entityClass)方法。addEntity()方法是将别名与实体类联系在一起。


例如:

Test1.java


import java.util.Iterator;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import cn.jbit.hibernate.entity.House;
import cn.jbit.hibernate.entity.QueryProperties;
import cn.jbit.hibernate.entity.User;
import cn.jbit.hibernate.util.HibernateUtil;


public class Test1 {


public static void main(String[] args) {
HibernateUtil u= new HibernateUtil();
SessionFactory sf = null;
Session session =null;
Transaction tx=null;
try{
session=u.getSession();
tx=session.beginTransaction();
//本地SQL查询

//sql语句中的u是sql中表Users表名,也是指定实体对象的别名。{}表示引用实体类的属性。
String sql="select {u.*},{h.*} from users as u,house as h where u.id=h.user_id";

SQLQuery query=session.createSQLQuery(sql).addEntity("u",User.class).addEntity("h",House.class);


List result=query.list();
Iterator it=result.iterator();
while(it.hasNext()){
Object[] results=(Object[])it.next();
User user =(User)results[0];
House house=(House)results[1];
System.out.println("用户名:"+user.getName()+" 房屋信息:"+house.getTitle()+user.getTelephone());
}
}catch(HibernateException e){
e.printStackTrace();
}

}