Hibernate 中的addEntity()方法使用
?
[转]hibernate SQLQuery addEntitysql = "select c.* from clazz c,student s where s.class_id = c.id"; List<Clazz> clazzs = (List<Clazz>)session.createSQLQuery(sql).list(); sql = "select c.* from clazz c,student s where s.class_id = c.id";List<Clazz> clazzs = (List<Clazz>)session.createSQLQuery(sql).list();?特别注意:返回结果是Object[]组成的List,通过Object下标访问属性
?
使用场合:非基于对象的查询,复杂查询
-------------------------------
1.2 简单查询,返回持久化对象
?
sql = "select c.* from Clazz c , student s where s.class_id = c.id "; List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql).addEntity(Clazz.class).list();??
特别注意: 1.addEntity方法指定返回包含Clazz对象的List 2. 查询出来的持久态对象,clazz对象的studets属性是各代理对象,访问的时候才会去查询DB 使用场合:基于对象的查询,但对象简单查询
--------------------------------
1.3 多表查询,返回多个实体
自己的:
?
List<Object> objects=(List<Object>)session.createSQLQuery("select {s.*},{c.*} from student s,clazz c where s.clazz_id=c.c_id") .addEntity("s", Student.class).addEntity("c",Clazz.class).list(); Iterator iterator=objects.iterator(); while(iterator.hasNext()) { Object[] o=(Object[]) iterator.next(); Student student=(Student) o[0]; Clazz clazz=(Clazz) o[1]; System.out.println(student.getName()+","+clazz.getTeacher()); }??
按照原博主的做法,一直有类型转换异常,所以只能用这方方法,求指教
view plaincopy to clipboardprint?
String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id "; List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql) .addEntity("c", Clazz.class) .addEntity("s", Student.class).list(); String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id ";List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql).addEntity("c", Clazz.class).addEntity("s", Student.class).list();String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id "; List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql) .addEntity("c", Clazz.class) .addJoin("s", "c.students").list(); String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id ";List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql).addEntity("c", Clazz.class).addJoin("s", "c.students").list();String sql = "select c.id, c.name from Clazz c , student s where s.class_id = c.id "; List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql) .addScalar("id", Hibernate.LONG) .addScalar("name", Hibernate.STRING) .setResultTransformer(Transformers.aliasToBean(Clazz.class)).list(); String sql = "select c.id, c.name from Clazz c , student s where s.class_id = c.id ";List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql).addScalar("id", Hibernate.LONG).addScalar("name", Hibernate.STRING).setResultTransformer(Transformers.aliasToBean(Clazz.class)).list();??
特别注意:
1. 如果不设置addScalar方法可能会报转型错误的异常.
2.托管查询可以使用投影,只查询指定的列属性
?
来源:http://hi.baidu.com/gacmotor/item/65053176a02a545b0c0a07eb