NativeQuery有三个单引号

时间:2017-01-13 20:16:38

标签: hibernate jpa spring-boot spring-data-jpa

我的查询由于三个引号而失败。这可能是另一个原因,但据我所知,它是由三个引号引起的。我似乎无法找到解决方案,我需要额外的帮助。我试过逃避和其他一切,但似乎无法解决问题。

我正在使用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]

1 个答案:

答案 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上找到。