我有大约1000个不同的ID,我需要多次运行下面的 hibernate 查询。根据检索到的记录(记录不需要存在),我在进入另一个表之前做了一些处理。
这里的问题是检索记录的整个过程大约需要20-25秒。这是正常的吗?是否可以进一步调整查询以缩短时间?
(将对每个id执行以下hibernate查询)
String query = "select emp from Employee emp where emp.id = '"+id"' and emp.status.statusCd = 'A'";
注意:Employee是一个包含大约30列的表。 status_cd和id是VARCHAR。
答案 0 :(得分:4)
首先,永远不要使用字符串连接来设置SQL中的变量字段。
String queryString = "select emp from Employee emp where emp.id = :id and emp.status.statusCd = 'A'";
Query query = Session.createQuery(queryString);
query.setInteger("id", 168);
其次,您可以尝试使用一个查询获取所有目标记录docs:
String queryString = "select emp from Employee emp where emp.id in (:id) and emp.status.statusCd = 'A'";
Query query = Session.createQuery(queryString);
Collection<Integer> idList = new ArrayList<Integer>();
query.setParameterList("id", idList);
然后,您将遍历此查询的结果并处理之前处理过的每条记录。
第三,如果您在处理每条记录时执行其他SQL,那么您还应该收集它们并在batch中执行它们。