我的理解是这样的,这句话说的很抽象,根本没有到点子上去,为什么它不能转换为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