我的查询由于三个引号而失败。这可能是另一个原因,但据我所知,它是由三个引号引起的。我似乎无法找到解决方案,我需要额外的帮助。我试过逃避和其他一切,但似乎无法解决问题。
我正在使用Spring Data JPA
@Query(value = "SELECT f FROM Fragrance f WHERE REPLACE(REPLACE(f.name, ' &', ''), '' ', '') = ?1" , nativeQuery = true)
Fragrance findByNameIgnoreSpecialCharacters(String name);
错误
java.lang.IllegalArgumentException: Parameter with that position [1] did not exist
at org.hibernate.jpa.spi.BaseQueryImpl.findParameterRegistration(BaseQueryImpl.java:502) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
答案 0 :(得分:1)
我无法在任何数据库上运行指定的本机查询,因此难怪Hibernate发现它格式不正确。
指定查询
SELECT
f
FROM
Fragrance f
WHERE
REPLACE(REPLACE(f.name, ' &', ''), '' ', '') = ?1
此查询中有两个错误。第一个错误是SELECT f FROM Fragrance f ...
要求在f
表中有一个名为Fragrance
的列,并且可能没有。请记住,这是本机查询而不是JPA查询。因此,正确的查询应以SELECT * FROM Fragrance ...
开头。
第二个错误是'' '
是查询的无效文本。 ''
表示单引号字符('
)。因此,此文本无法正确启动。正确的文字应为''' '
。
正确查询
SELECT
*
FROM
Fragrance
WHERE
REPLACE(REPLACE(name, ' &', ''), ''' ', '') = ?1
Sample working project可在Github上找到。