Hibernate 原生SQL查询问题总结

HQL  查询SQL就不多说

 

Query query = getSession().createQuery(hql);
List list = query.list();

getHibernateTemplate().find(hql, value);
  

原生SQL 查询

 

users表:id name age class_id
score表:id user_id scores

String sql = "select * from users user,score s where user.id=s.user_id";
//加入事务处理,否则Session未关闭会出异常
SessionFactory factory = null;
Session session = null;
List tempList = null;
try {
    factory = getSessionFactory();
    session = factory.openSession();
    session.beginTransaction();
    tempList = session.createSQLQuery(queryString)
 		.addEntity("user", User.class).addEntity("s", Score.class).list();
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    session.getTransaction().rollback();
} finally {
    session.close();
    factory.close();
}
return tempList;

读取list内容
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
	Object[] object = (Object[]) iterator.next();
	//学生信息
	Users user = (Users) object[0];
    //分数信息
	Score score= (Score) object[1];
} 

 

  问题点

当你的Hibernate的jar包是3.0的时候

1. sqlQuery后面必须加.addEntity()或.addScalar()方法,

.addEntity()返回的类型为实体类,.addScalar("id", Hibernate.INTEGER)返回id的信息,你加几个就返回几个字段的值

list中存储的是Map。

 

2.当你数据表中的字段有class_id 下划线而实体类中为ClassID时,为有异常提示映射不到列名。

 

推荐Hibernate使用3.2以上的版本addEntity和addScalar方法可加可不加都可以实现

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值