小编uni*_*lep的帖子

where IN 子句 - 多列(querydsl)

我有两对的三个整数值。
我想将其用作 WHERE 子句中的 IN 列表。

(2019, 5) (2019, 6) (2019, 7)

我想在这样的查询中使用上面的两对列表:

SELECT
    *
FROM
    WEEK_REPORT A
WHERE
    A.user_id IN ('test2','test5' ) AND
    (A.year, A.week_no) IN ((2019,4),(2019,5),(2019,6));
Run Code Online (Sandbox Code Playgroud)

为此,我写了如下源代码:

// lastYear=2019, lastWeekNo=4
Tuple t = JPAExpressions.select(Expressions.constant(lastYear), Expressions.constant(lastWeekNo))
    .from(weekReport)
    .fetchOne();

// currentYear=2019, currentWeekNo=5        
Tuple t2 = JPAExpressions.select(Expressions.constant(currentYear), Expressions.constant(currentWeekNo))
    .from(weekReport)
    .fetchOne();

// nextYear=2019, nextWeekNo=4
Tuple t3 = JPAExpressions.select(Expressions.constant(nextYear), Expressions.constant(nextWeekNo))
    .from(weekReport)
    .fetchOne();

return queryFactory
    .select(weekReport)
    .from(weekReport)
    .where(weekReport.user.eq(user)
        .and(Expressions.list(weekReport.year, weekReport.weekNo).in(t, t2, t3)))
    .fetch();
Run Code Online (Sandbox Code Playgroud)

但是,不会输出正确的结果并发生错误。

java.lang.UnsupportedOperationException: null
    at com.querydsl.jpa.JPASubQuery.fetchOne(JPASubQuery.java:66) ~[querydsl-jpa-4.1.4.jar:na]
Run Code Online (Sandbox Code Playgroud)

我在官方文档里查了一下,没有出来。
有办法吗?

谢谢你。

mysql sql in-clause querydsl

10
推荐指数
1
解决办法
1252
查看次数

为什么spring security oauth2客户端需要AuthorizationRequestRepository?

我在应用 spring oauth2 客户端时遇到问题。

我发现org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter想要创建一个OAuth2AuthorizationRequest并通过authorizationRequestRepository.

相关代码:

// OAuth2AuthorizationRequestRedirectFilter.class
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) {
    OAuth2AuthorizationRequest authorizationRequest = this.authorizationRequestResolver.resolve(request);
    ...
    this.sendRedirectForAuthorization(request, response, authorizationRequest);
    ....
}

private void sendRedirectForAuthorization(HttpServletRequest request, HttpServletResponse response,
                                                OAuth2AuthorizationRequest authorizationRequest) {
    ...
    this.authorizationRequestRepository.saveAuthorizationRequest(authorizationRequest, request, response);
    ...

}
Run Code Online (Sandbox Code Playgroud)

文档中声明默认实现是将其存储在 HttpSession 中,并且可以根据需要将其存储在 cookie 中。

相关文档:https : //docs.spring.io/spring-security/site/docs/5.0.7.RELEASE/reference/html/oauth2login-advanced.html#oauth2login-advanced-authorization-request-repository

题)

但是我不理解。为什么不应该将authorizationRequest对象存储在内存中?我不知道为什么 spring security 提供AuthorizationRequestRepository接口以便我可以使用 Session 或 Cookie。

spring spring-security spring-boot spring-security-oauth2

5
推荐指数
1
解决办法
1154
查看次数