Querydsl:如何使用返回元组的子查询创建Query

时间:2018-01-15 10:25:55

标签: hibernate jpa querydsl

我有以下问题:

SELECT * FROM DOCUMENT WHERE (TYPE, CREATION_DATE) IN(
    SELECT TYPE, MAX(CREATION_DATE) 
    FROM DOCUMENT 
    WHERE MEMBER_ID = 107374183 
        AND CREATION_TYPE = 'GENERATED_BY_USER'
    GROUP BY TYPE
);

现在我试图用querydsl创建这个sql的映射,但是子查询有问题。由于此子查询返回包含两个列值的元组,我得到错误:

  

类型中的(Collection)方法   SimpleExpression不适用于参数   (列表<Tuple&GT)

这是我到目前为止所尝试的:

QDocument document = QDocument.document;
QDocument d = new QDocument("d");
query()
  .from(document)
  .where(DOCUMENT.type, DOCUMENT.creationDate.in(
    new JPAQuery()
      .from(d)
      .where(DOCUMENT.member().id.eq(memberId))
      .where(DOCUMENT.creationType.eq(DocumentCreationType.GENERATED_BY_USER))
      .groupBy(DOCUMENT.type)
      .listResults(DOCUMENT.type, d.creationDate.max())
      .getResults()
  ))
  .list(DOCUMENT);

任何人都知道如何用querydsl实现这个SQL查询?我是否需要使用加入?

0 个答案:

没有答案