我认为问题的标题可能会被误解,所以我会解释所有的工作流程。
我有一个select2,它允许我从后端的文档列表控制器中找到所有丢失的文档编号。 Atm我已经实现了一种方法,其中hibernate返回当前文档列表,并且通过迭代它,该方法使用" fake"来填充另一个列表。缺少号码的文件。
我想知道是否有可能在HQL查询中翻译此工作流程,该查询会返回一个缺少数字的新文档列表。
示例:
基准表:
| id | number |
---------------
| 1 | 1 |
---------------
| 8 | 3 |
---------------
| 9 | 4 |
---------------
| 12 | 8 |
我的Select2将收到documentsList
这样的
{
model: {id: 2, number: 2},
model: {id: 5, number: 5}
model: {id: 6, number: 6}
model: {id: 7, number: 7}
}
我希望这个问题很清楚, 提前谢谢大家
编辑2016/05/02
这是我已实施的代码。
HQLQueryProperties
是我创建的用于设置由DAO执行的HQL查询的类,该查询由服务调用(它是Struts2 + Hibernate + Spring应用程序)。无论如何这部分不是那么重要,因为DAO可以执行普通的HQLQueries或从HQLQueryProperties
对象中提取查询
HQLQueryProperties invoicesProperties = new HQLQueryProperties();
Map<String, Object> invoicesAttributes = invoicesProperties
.addJoinAttributes("documentType")
.addWhereAttribute("listByOperationYear", "and", null)
.addWhereAttribute("listByDocumentTypeId", "and", null)
.addWhereAttribute("listByFacilityIds", "and", null)
.addWhereAttribute("excludeNumbers", "and", null)
.addQueryAttribute("operationYear", ((Map<String, Object>) session.get("operationYear")).get("selectedYear"))
.addQueryAttribute("documentTypeId", documentTypeId)
.addQueryAttribute("facilityIds", -1, ((Facility) session.get("facility")).getId())
.addQueryAttribute("numbers", -1)
.buildAttributes();
paginator是我创建的另一个类,用于设置生成的jsp,其中一个表可以由用户自定义,该表与该对象进行交互。方法getItems()
调用所需的服务/ DAO并返回List<MyClass>
项。它还用于对Select2结果进行分页
Paginator paginator = new Paginator("documentHeaderService", servletContext, getColumns("documentHeaderService"), invoicesAttributes, false);
paginator.setPerPage(-1);
paginator.setOrderColumn("number");
List<DocumentHeader> tempDocuments = paginator.getItems();
这里是一个棘手的部分,我遍历集合以检索丢失的数字。
int currentNumber = 1;
for (DocumentHeader tempDocument : tempDocuments) {
while (currentNumber < tempDocument.getNumber()) {
freeNumbersList.add(new DocumentHeader(currentNumber));
currentNumber++;
}
currentNumber++;
}