使用带有@Query注释的?1进行参数替换

时间:2017-03-08 15:53:27

标签: java sql spring annotations

我正在使用@ org.springframework.data.jpa.repository.Query注释进行sql查询,如下所示;

@Query(nativeQuery = true, value = "select ITEM_ID from db.ITEMS "
    + "where dbms_lob.instr(ITEM_HISTORY, utl_raw.cast_to_raw('<PERSON><NAME>?1</NAME></PERSON>'), 1, 1) > 0")
List<String> findByName(String name);

此查询在名为ITEM_HISTORY的blob中搜索<PERSON><NAME>?1</NAME></PERSON>,并返回匹配ITEM的ID。

?1应该自动替换为String name,但它不起作用。我几乎可以肯定这是因为'<PERSON><NAME>?1</NAME></PERSON>'周围的引号(&#39;)。但是,我无法弄清楚如何做到这一点。 这里的语法是什么?

2 个答案:

答案 0 :(得分:0)

您应该将?1替换为{0}

答案 1 :(得分:0)

我已将'<PERSON><NAME>?1</NAME></PERSON>'更改为'<VERMITTLER><VTNR>' || ?1 || '</VTNR></VERMITTLER>',但它正在运作。

请注意||是Oracle的串联运算符。因此,此解决方案仅适用于Oracle。这个想法很简单,?1不应该在引号内。