我的理解是这样的,这句话说的很抽象,根本没有到点子上去,为什么它不能转换为bean对象,那么肯定是不能匹配构造函数呗,因为加了select语句后你要么选出的是指定的字段select u.name from User as u!/当然加多个属性的时候见下方,这个时候必要的操作是在实体bean中要生成你所查询字段汇总的构造函数!!而不加select的时候hibernate会自动根据查询数据映射为一个对象的!!heihei!如果有错误希望大家更正一起讨论哈 给出一查询的汇总!!
public List getUsers(String id){ List list=new ArrayList(); String hql="from User as user where user.id like :id"; //参数名称查询 factory=DBHelper.getSessionFactory(); Session session=factory.openSession(); Transaction transaction=session.beginTransaction(); Query query=session.createQuery(hql); query.setString("id", "%"+id+"%"); list=query.list(); transaction.commit(); session.close(); return list; }
//可以拼字符串 List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list(); //Query query = session.createQuery("select s.id, s.name from Student s where s.name like ?"); //query.setParameter(0, "%1%"); //List students = query.list(); //可以使用?方式传递参数 //参数的索引从0开始 //传递的参数值,不用单引号引起来 //注意方法链编程 List students = session.createQuery("select s.id, s.name from Student s where s.name like ?") .setParameter(0, "%1%") .list(); //使用 :参数名称 的方式传递参数值 List students = session.createQuery("select s.id, s.name from Student s where s.name like :myname") .setParameter("myname", "%1%") .list(); //使用 :参数名称 的方式传递参数值 List students = session.createQuery("select s.id, s.name from Student s where s.name like :myname and s.id=:myid") .setParameter("myname", "%1%") .setParameter("myid", 12) .list(); //支持in,需要使用setParameterList进行参数传递 List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)") .setParameterList("myids", new Object[]{1, 2, 3, 4, 5}) .list(); //查询2008年2月创建的学生 List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?") .setParameter(0, "2008-02") .list(); //查询2008-01-10到2008-02-15创建的学生 List students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?") .setParameter(0, sdf.parse("2008-01-10 00:00:00")) .setParameter(1, sdf.parse("2008-02-15 23:59:59")) .list();
这上面是一个模糊查询,网很多说的三种
public static void page() { Session s = null; try { s = HibernateUtil.getSeesion(); final String hql = " from User "; //User是类名 final Query q = s.createQuery(hql); q.setFirstResult(0); //从第0条开始 q.setMaxResults(10); //取出10条 final List list = q.list(); for (final User u : list) { System.out.println(u.getId() + " " + u.getName()); } } finally { s.clear(); } }
public class HibernateUtil { static SessionFactory sessionFactory = null; static { final Configuration cfg = new Configuration(); cfg.configure(); //路径可以改变 sessionFactory = cfg.buildSessionFactory(); } public static SessionFactory getSessionFactory() { return sessionFactory; } public static Session getSeesion() { return sessionFactory.openSession(); } }
一些常见的知识:
Hibernate HQL 查询 介绍和基本语法 HQL 大小写不敏感,当有相同的实体类名时,使用包名.实体类 Query query=session.createQuery("from Cat c"); List catlist=query.list(); 返回单个对象 Query q=session.createQuery("select count(c) from Cat c"); Number num=(Number)q.uniqueResult(); //返回单个实例 int count=num.intValue(); //返回数值 查询总数时,HQL 格式必须为以上语句格式,返回值可能为 Short Integer Long BigInteger 具体由主键的类型而定 返回 Object[]数组 List