setParameterList()不返回完整结果集
我想使我的小型弹簧项目有效。所以我使用IN
子句而不是在hql中使用循环。setParameterList()不返回完整结果集
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
列表中) resultset,不会返回其他结果。
我试图通过整数列表像[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);
我的代码可能是错误的,因为我要通过电子书和参考材料做项目。先谢谢你。
我通常做IN(?, ..., ?)
使用java.sql.Array
。
long[] deptIds = listDeptmntId.toArray(new long[listDeptmntId.size()];
java.sql.Array array = conn.createArrayOf("LONG", deptIds);
query.setPameter("depts", array);
HQL查询使用(映射)对象而不是java.sql包库(https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/ Query.html#setParameterList(java.lang.String,java.util。收藏)) –
@LucaBassoRicci当然,谢谢。 –
q1)检查连接(看不到任何其他原因只返回一个对象)。并且传递[1,2,3]不会与该查询一起工作,因为在查询中您正在处理部门对象。如果你想让[1,2,3]改变查询来检查这样的dept-id - >“select s.department.departmentName,g.dateTime from Gauge g inner join g.survey s where s.department。 id in(:id-list)“
q2)当您设置参数时,您已经创建了查询对象,因此在该点设置参数可能不会影响查询对象。 (因为在创建查询对象时将参数设置为查询,所以您的“+”方法起作用)。
第一个问题,当我手动给它的工作。例如: '... where(1)中的s.department //返回1的结果集' '...其中s.department在(2)//返回2的结果集' 但是......其中(1,2)中的s.department //仅返回1的结果集 – varman
你是什么意思*有时当我使用参数传递(“=:”)时,它不适用于整数* ? –
,因为它不起作用,我无法弄清楚会发生什么 – varman
这个问题需要: 1.分成两个不同的问题 2.整合代码与一个工作的例子(你使用Query.list()或uniqueResult( )还是其他的?),更好地与休眠配置 –