Spring jdbc 不适用于 h2 查询递归
Spring jdbc not work with h2 query recursion
有标准的 tables 组和 ACL。我与 table 组建立了多对多连接,以便能够将该组包含在该组中。现在,当我尝试 Spring 安全性来替换使用 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解决这个问题?
在网络 H2 查询中工作正常但在 spring jdbc preparentstatement return 0 行中
There is a known bug in H2's implementation of recursive CTE. 。按照现在的情况(版本 1.4.191),如果您的递归 CTE 包含任何绑定变量,则执行不正确。如果您删除并内联绑定变量,它应该可以工作(当然要注意 SQL 注入)。
请注意,此功能是 experimental in H2
有标准的 tables 组和 ACL。我与 table 组建立了多对多连接,以便能够将该组包含在该组中。现在,当我尝试 Spring 安全性来替换使用 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解决这个问题?
在网络 H2 查询中工作正常但在 spring jdbc preparentstatement return 0 行中
There is a known bug in H2's implementation of recursive CTE.
请注意,此功能是 experimental in H2