2014-09-19 49 views
0
@Repository 
public interface GroupRepository extends JpaRepository<Group, String> {  
//Other queries.... 

@Query(value = "with cte(group_id, parent_group_id, group_name) as(" 
     + "select group_id, parent_group_id, group_name " 
      + "from hea.hea_group " 
       + "where group_id = ?1 " 
     + "union all " 
     + "select g.group_id, g.parent_group_id, g.group_name " 
      + "from hea.hea_group g " 
      + "inner join cte on cte.group_id = g.parent_group_id " 
       + "where g.parent_group_id is not null " 
     + ") select * from cte", nativeQuery = true) 
List<Object> getChildGroups(String groupId); 
} 

上面是我写的应该返回父组及其所有子项的查询。查询做了什么,当我用一个硬编码的组ID值替换?1并将该方法更改为没有参数时,它会做什么,但是当我尝试像上面那样运行它时,即使传入,它也不会返回任何内容完全相同的价值,我是硬编码。jpql原生查询未设置参数

下面是查询生成的sql。当我更换?用组ID在运行测试数据库时返回它应该得到的结果。

with cte(group_id, parent_group_id, group_name) as(select 
    group_id, 
    parent_group_id, 
    group_name 
from 
    hea.hea_group 
where 
    group_id = ? 
union 
all select 
    g.group_id, 
    g.parent_group_id, 
    g.group_name 
from 
    hea.hea_group g 
inner join 
    cte 
     on cte.group_id = g.parent_group_id 
where 
    g.parent_group_id is not null) select 
    * 
from 
    cte 
+0

检查由JPA发出的SQL。这通常是通过开启JPA提供程序的日志记录来完成的。 – Chris 2014-09-19 18:55:22

+0

我将SQL添加到问题中,我没有看到任何问题,它似乎知道group_id是一个变量。 – jsb523 2014-09-19 19:03:20

+0

你如何设置参数?请添加代码。 – pms 2014-09-20 06:25:12

回答

0

变量是基于零的,所以?0是你应该使用的。