【发布时间】:2015-04-02 22:34:37
【问题描述】:
我最近一直在迁移我的数据库,并将剩余的 SQL 查询转移到 jooq。玩得开心:
private SelectQuery<?> getIdeasQuery() {
Select<?> numComments = dslContext.select(DSL.count().as("comment_count"), COMMENT.IDEA_ID).from(COMMENT).groupBy(COMMENT.IDEA_ID);
Select<?> numLikes = dslContext.select(DSL.count().as("like_count"), USER_LIKES_IDEA.IDEA_ID).from(USER_LIKES_IDEA).groupBy(USER_LIKES_IDEA.IDEA_ID);
return dslContext
.select(DSL.field("comment_count").as("num_comments"))
.select(DSL.field("like_count").as("num_likes"))
.select(USER.DISPLAY_NAME)
.select(USER.AUTHORITY)
.select(IDEA.fields())
.from(IDEA.leftOuterJoin(numComments).on(COMMENT.IDEA_ID.eq(IDEA.ID))
.leftOuterJoin(numLikes).on(USER_LIKES_IDEA.IDEA_ID.eq(IDEA.ID))
.leftOuterJoin(USER).on(IDEA.USER_ID.eq(USER.ID)))
.getQuery();
}
然后根据上下文使用返回的查询附加其他修饰符(使用addConditions()、addOrderBy()、addLimit() 等),然后执行。
我遇到的问题是这两个子选择查询未命名为它们的原始连接名称。这是正确的行为!但是,在 jOOQ 中,我很难找到如何指定要加入的子查询字段。我已经尝试按照this StackOverflow 答案中所述重命名子查询的路线,但类型不适合我。
有什么想法吗?
【问题讨论】: