J'ai essayé les deux, les paramètres indexés et nommés, mais cela ne fonctionne pas:
SELECT * FROM Character WHERE pinyin like '%:keyword%'
Le sql sortant est:
Hibernate:
public interface CharacterRepository extends JpaRepository<Character, Long> { @Query(nativeQuery=true, value="SELECT * FROM Character WHERE pinyin like '%:keyword%'") List<Character> findByKeyword(@Param("keyword") String keyword); }
Pourquoi l’espace réservé au mot-clé n’est-il pas remplacé par le paramètre que j’ai transmis?
3 Réponses :
Vous pouvez essayer ceci:
repository.findByKeyword("%myKeyword%");
et appeler la méthode comme ceci:
public interface CharacterRepository extends JpaRepository<Character, Long> { @Query(nativeQuery=true, value="SELECT * FROM Character WHERE pinyin like ':keyword'") List<Character> findByKeyword(@Param("keyword") String keyword); }
Essayez ceci:
JPQL / HQL
List<Character> findByPinyinContaining(String pinyin);
Natif (PostrgeSQL / MySQL) p >
select * from character c where c.pinyin like '%' || :keyword || '%'
Natif (PostrgeSQL)
select * from character c where c.pinyin like concat('%', :keyword, '%')
Variante alternative avec la méthode de requête Spring Data JPA
select c from Character c where c.pinyin like %:keyword% select c from Character c where c.pinyin like concat('%', :keyword, '%')
Informations supplémentaires:
Votre requête doit ressembler à ceci -
@Query(nativeQuery=true, value="SELECT * FROM Character c WHERE c.pinyin like %:keyword%") List<Character> findByKeyword(@Param("keyword") String keyword);
J'espère que cela vous aidera.
Il n'est "pas remplacé" car ce n'est pas un paramètre nommé comme ça. Il fait (partie) d'un littéral de chaîne (entouré de guillemets). Vous devez l'avoir en dehors des guillemets pour être un paramètre
@tobi Est-ce que nos réponses vous ont aidé? N'oubliez pas de les marquer ...