0

我有以下三个表,

表格1:

t1_name - PK

连接表:

t1_name - PK,FK
t2_name - PK,FK
start_date
end_date
some other data from further join table

表2:

t2_name - PK

我必须在 JSON 中查询 Table1 结果以了解以下条件,查询与“Raj”中的 t2_name 匹配的所有 t1_name 介于 start_date 为“2021-01-01”、“2021-01-25”之间。

现在我有以下设置,

select t1_name from Table1 t1 JOIN JoinTable jt JOIN Table2 t2 where (t2 in ('Raj')) and (jt.start_date between '2021-01-01' and '2021-01-25')

一旦我得到所有 t1_names 的列表,我查询 findAll(使用条件)以使用 pageable 从数据库中获取所有详细信息。

规范是这样的,

@Override
      public Predicate toPredicate(final Root<Table1> root, final CriteriaQuery<?> query,
          final CriteriaBuilder builder) {
        Join<Object, Object> joinTable = null;
        Join<Object, Object> table2 = null;
        
        if (currentQueryIsCountRecords(query)) {
          joinTable = root.join(t1_name, JoinType.INNER);
          table2 = joinTable.join(t2_name, JoinType.INNER);
          joinTable.join("somefield", JoinType.LEFT)
              .join("somefield", JoinType.LEFT);
        } else {
          joinTable =
              (Join<Object, Object>) root.fetch(t1_name, JoinType.INNER);
          table2 =
              (Join<Object, Object>) joinTable.fetch(t2_name, JoinType.INNER);
          joinTable.fetch(somefield, JoinType.LEFT)
              .fetch(somefield, JoinType.LEFT);
        }
       
        query.distinct(true).orderBy(pageable....);
        /**
         * Other where clause predicates can be defined here.
         * 
         * Example : like, date range between, and , or conditions.
         */
        Expression<String> parentExpression = root.get("t1_name");
        Predicate finalPredicate = parentExpression.in(t1_names);
        return builder.and(finalPredicate);
      }

但结果看起来像这样,

{
    "table1":{
        "t1_name": "1",
        "jointable": [
            {
                "table2":{
                    "t2_name": "Raj"
                }
                "start_date" : "2021-01-02"
            },
            {
                "table2":{
                    "t2_name": "Kumar"
                }
                "start_date" : "2021-01-27"
            }
        ]
    }
}

但预期的结果只是,

{
    "table1":{
        "t1_name": "1",
        "jointable": [
            {
                "table2":{
                    "t2_name": "Raj"
                }
                "start_date" : "2021-01-02"
            }
        ]
    }
}

我如何使用标准查询中的第二步来归档它,如何在应用可分页时应用多个 IN 子句。

4

0 回答 0