在QueryDSL中指定结果将是唯一的

时间:2014-03-28 14:53:42

标签: java querydsl

我有一本桌子书,然后是一本桌子书,记录了这本书的版本。

-----------------------------------------
| book_id | edition | edition_date |
| 5       | 1       | 2013-02-01   |
| 5       | 2       | 2014-01-25   |
-----------------------------------------

book_id是书表中的外键。 book_id和edition是book_edition表的复合主键。我想使用QueryDSL检索某本书的最新版本的编辑日期。这是一个子查询,它有助于更​​大的查询。它似乎应该是直截了当的,但到目前为止,我能想到的唯一方法是:

NumberExpression<Integer> maxEdition = new SQLSubQuery().from(SBookEdition.bookEdition)
                   .where(SBookEdition.bookEdition.bookId.eq(SBook.book.id))
                   .unique(SBookEdition.bookEdition.edition.max());
Expression<Date> bookDate =  new SQLSubQuery().from(SBookEdition.bookEdition)
                   .where(SBookEdition.bookEdition.bookId.eq(SBook.book.id),SBookEdition.bookEdition.edition.eq(maxEdition))
                   .unique(SBookEdition.bookEdition.editionDate.max())
                   .as(new PathBuilder<>(Date.class, column.getAlias()));

似乎必须有一种更简单的方法,而且不需要要求&#34; max&#34;我所知道的独特之处,因为它是主键。

0 个答案:

没有答案