0

In Simple JDBC (with no Hibernate) we can do batch select by changing only place holder, like this

PreparedStatement stmt = conn.prepareStatement(
    "select id, name from users where id = ?");
for ( int i=0; i < 10; i++ ) {
  stmt.setInt(i);  // or whatever values you are trying to query by
  // execute statement and get result
}

How we can do it in Hibernate?

4

2 回答 2

2

希望这可以帮助你,

 String hql = "from Users s where s.id= :userId";

 for(int i=0; i< 10;i++){
 List result = session.createQuery(hql)
    .setParameter("userId", i)
    .list();
}
于 2013-10-21T06:56:35.943 回答
0

这是最常见和用户友好的方式。它使用冒号后跟参数名称 (:example) 来定义命名参数

示例 1:使用 setParameter() 方法

String hql = "from Student s where s.registerNumner = :registerNumner";
List result = session.createQuery(hql).setParameter("registerNumner", "12345").list();

setParameter() 方法足够聪明,可以发现绑定变量的参数数据类型。

示例 2:使用 setString() 方法

你可以使用 setString 告诉 Hibernate 这个参数的日期类型是 String。

String hql = "from Student s where s.registerNumber = :registerNumber";
List result = session.createQuery(hql).setString("registerNumber", "12345").list();

示例 3:使用 setProperties() 方法

这个功能很棒!您可以将对象传递到参数绑定中。Hibernate 会自动检查对象的属性并匹配冒号参数。

Student student = new Student();
Student.setRegisterNumber("12345");

String hql = "from Strudent s where s.registerNumber = :registerNumber";
List result = session.createQuery(hql).setProperties(student).list();

示例 4:

您也可以使用位置参数。

String hql = "from Student s where s.registerNumber = ? and s.studentName = ?";
List result = session.createQuery(hql).setString(0, "12345").setParameter(1, "Harshad").list();

但它很容易被破坏,因为绑定参数的位置(即索引)的每次更改都需要更改参数绑定代码

批次选择:

您可以使用以下方式进行批量选择

String hql = "from Users s where s.id= :userId";
List finalResult = new ArrayList();
for(int i=0; i< 10;i++){
   List result = session.createQuery(hql).setParameter("userId", i).list();
   finalResult.addCollection(result );
}
于 2013-10-23T09:06:44.667 回答