Hibernate HQL查询提取缺少的id实体

时间:2016-04-28 13:32:33

标签: java hibernate hql

我认为问题的标题可能会被误解,所以我会解释所有的工作流程。

我有一个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++;
}

0 个答案:

没有答案