java - Spring jdbc 不适用于 h2 查询递归

标签 java spring recursion jdbc h2

有标准的表组和 ACL。我与组表建立了多对多的连接,以便能够将该组包含在组中。现在,当我尝试使用 Spring security 来替换使用 H2 数据库和请求类型的查询时

@Bean
public JdbcUserDetailsManager userDetailsManager() {
    JdbcUserDetailsManager manager = new JdbcUserDetailsManager();
    manager.setDataSource(dataSource);
    manager.setRolePrefix("GROUP_");
    manager.setEnableGroups(true);
    manager.setEnableAuthorities(false);
    manager.setGroupAuthoritiesByUsernameQuery(
            //h2
            "WITH recursive rec_groups (parent, child, name, authority) AS " +
                    "(SELECT gm.group_id, cast(NULL as bigint), g.group_name, ga.authority " +
                    "FROM wsseddb.group_members as gm, wsseddb.groups g, wsseddb.GROUP_AUTHORITIES as ga " +
                    "WHERE username = ? and g.id = gm.group_id and ga.group_id = gm.group_id " +
                    "UNION ALL " +
                    "SELECT gpc.parent_id, gpc.child_id, g.group_name, ga.authority " +
                    "FROM wsseddb.groups_parent_child as  gpc, rec_groups as rg, wsseddb.GROUPS  as g,  wsseddb.GROUP_AUTHORITIES as ga " +
                    "WHERE child_id = rg.parent and g.id = gpc.parent_id and ga.group_id = gpc.parent_id) " +
                    "SELECT gs.parent, gs.name as group_name, gs.authority FROM rec_groups gs");
    return manager;
}`

我不会回来列出 GrandedAuthority。当我使用 postgresql 时,一切都运行良好。如何用h2解决这个问题?

enter image description here

在 Web H2 查询中工作良好,但在 spring jdbcpreparentstatement 返回 0 行

最佳答案

There is a known bug在H2的递归CTE实现中。 See also this question 。就目前而言(版本 1.4.191),如果递归 CTE 包含任何绑定(bind)变量,则执行不正确。如果您删除并内联绑定(bind)变量,它应该可以工作(当然要注意 SQL 注入(inject))。

请注意,此功能是 experimental in H2

关于java - Spring jdbc 不适用于 h2 查询递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36009280/

相关文章:

C++ 递归问题

java - Android - 通过谷歌地图获取当前位置

解析 url 期间 Angular Http 失败

javascript - jquery/javascript 错误 - 太多递归 - 使用自调用函数

spring - SwaggerUI 中的 Rest API 版本 header

java - Spring websocket 获取连接数和详细信息

c# - 在集合中查找循环项(非传递项)

java - 尝试从 json 字符串获取数据时出现异常

java - 条纹框架

java - 来自 Wikipedia API 的 JSON 和 GSON - 解析具有不同名称的对象