setParameterList()不返回完整的结果集

时间:2017-09-11 11:38:00

标签: java spring hibernate spring-boot

我想有效地完成我的小弹簧项目。所以我使用IN子句而不是在hql中使用循环。

01)setParameterList()

中的问题
  

要使用setParameterList(),我们必须传递列表对象

List<Department> listDeptmntId = reportService.listDepartmentID(companyId); //list of objects

String hql = "select s.department.departmentName, g.dateTime from Gauge g inner join g.survey s where s.department in (:dpts)";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setParameterList("dpts",listDeptmntId);

查询工作正常。但是这只返回一个(listDeptmntId列表中的第一个对象)结果集,不会返回其他结果。

我尝试使用以下方法传递像 [1,2,3] 这样的整数列表也无效。

List<Integer> dptIds=listDeptmntId.stream().map((Department::getDepartmentId()).collect(Collectors.toList());

02)setParameter()

中的问题
int cId=10;
String hql="...... companyId=:id" 
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setParameter("id",cId);

有时当我使用参数传递(“ =:”)时,它不适用于 整数 。但直接将变量设置为查询,如下所示正在工作

int cId=10;
String hql="...... companyId="+cId
Query query = sessionFactory.getCurrentSession().createQuery(hql);

我的代码可能有误,因为我正在阅读电子书和参考资料来完成项目。先感谢您。

2 个答案:

答案 0 :(得分:1)

我通常使用IN(?, ..., ?)java.sql.Array

long[] deptIds = listDeptmntId.toArray(new long[listDeptmntId.size()];
java.sql.Array array = conn.createArrayOf("LONG", deptIds);
query.setPameter("depts", array);

答案 1 :(得分:0)

q1)检查连接(无法查看仅返回一个对象的任何其他原因)。并且传递[1,2,3]不会使用该查询,因为在查询中您处理部门对象。如果你想[1,2,3]工作,改变查询以检查这样的dept-id - &gt; &#34;从Gauge g inner join g.survey中选择s.department.departmentName,g.dateTime,其中s.department.id在(:id-list)&#34;

q2)您在设置参数时已经创建了查询对象,因此在该点设置参数可能不会影响查询对象。 (您的&#34; +&#34;方法有效,因为在创建查询对象时将参数设置为查询。)