对setEntity()方法 说明 解决了 我 实体绑定查询得问题
(1)使用 ? 指定参数
...
Query query = session.createQuery("from Student s where
s.age > ? and s.name like ? ");
query.setInteger(0,18);
query.setString(1,"%abc%");
...
(2)使用 : 后跟变量的方法设置参数
...
Query query = session.createQuery("from Student s where
s.age > :minAge and s.name like :likeName ");
query.setInteger("minAge",18);
query.setString("likeName","%ABC%");
...
(3)setEntity()方法
setEntity()方法把参数与一个持久类的实例绑定,例如下面的示例
...
Team team = (Team)session.get(Team.class,"5f45saf45sdf456f");
Query query = session.createQuery("from Student s where s.team = :team");
query.setEntity("team",team); //设置参数为team实例
...
注:上述的team对象可以是持久对象也可以是脱管对象
(4)setParameter()方法
setParameter()方法的全称是setParameter(String paraName,实例,实例类型),这个方法
可以绑定任何类型的参数.其中第三个参数可以省略,hibernate要以根据实例推断出绝大部分
对应的映射类型.
下面将(3)中的代码做一下改动
query.setParameter("team",team,Hibernate.entity(Team.class)).
或者query.setparameter("team",team).
(5)setPorperties()方法
该方法的全称是setProperties(类实例).它将类实例的属性名与参数值相对应
...
Student student = new Student();
student.setAge("18");
Query query = sesion.createQuery("from Student s where s.age = :age");
query.setProperties(student); //设置参数为student对象
...
注意:HQL语句中的变量age必须和student的属性age同名,否则会出错.