java.lang.IllegalArgumentException: Paramètre avec cette position [1] n'existe pas
C'est mon référentiel:
@Repository
public interface MyRepository extends JpaRepository<Entity, Long> {
public static final String DISTANCE = "((acos(sin(?1 * pi() /180) * sin(a.latitude * pi() /180) + cos(?1 * pi() /180) * cos(a.latitude * pi() /180) * cos((?2 - a.longitude) * pi() /180)) * 180 /pi()) * 60 * 1.609344) as distance";
@Query("select new package.SearchResult(" + DISTANCE + ", a.addressOwner) from Address a group by a.addressOwner, col_0_0_ having col_0_0_ < ?3 order by col_0_0_")
public Page<SearchResult> findClosestByCoordinates(double lat, double lng, double maxDistance, Pageable pageable);
}
Lorsque j'essaie d'exécuter cette méthode une exception se produit:
Paramètre avec cette position [1] n'existe pas; nested exception java.lang.IllegalArgumentException: Paramètre avec cette position [1] n'existait pas"]
Mais lorsque je remplace Page<SearchResult>
avec List<SearchResult>
tout fonctionne bien. Est-ce le Printemps bug ou quelque chose?
Mise à JOUR: je pense avoir trouvé ce qui est faux: lorsque TOUS les paramètres de prendre partie dans la clause where, tout est ok. Mais si au moins l'un d'entre eux n'est pas utilisée, elle échoue. Mais je ne comprends pas pourquoi il arrive avec une Page et de ne pas se produire lors de l'utilisation de la Liste. Et quelle est la meilleure façon de traiter avec elle?
Une stacktrace sera également très utile. BTW, essayez de remplacer
col_0_0_
pour a.col_0_0_
dans la RequêteAvez-vous essayer de remplacer de position paramètres avec les paramètres nommés? J'ai également eu un problème avec plusieurs position params avec le même indice dans la requête, mais quand j'ai changé à nommé il n'y a pas d'erreur.
Je pense avoir trouvé ce qui est faux: lorsque TOUS les paramètres de prendre part à
where
clause, tout est ok. Mais si au moins l'un d'entre eux n'est pas utilisée, elle échoue. Mais je ne comprends pas pourquoi il arrive avec Page
et ne se produit pas lors de l'utilisation de List
. Et quelle est la meilleure façon de traiter avec elle?quelle a été la solution?
OriginalL'auteur user3861812 | 2015-08-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire la requête par l'utilisation de @Param("query_param_name") annotation que faire des requêtes plus claire et compréhensible.
Cette erreur venir quand le printemps pas trouver où entrer dans la méthode param dans la requête.
Ainsi, l'utilisation de @Param() annotation lie la requête param et de la méthode param ensemble et d'augmenter la simplycity de la requête
OriginalL'auteur Ashwani Tiwari
J'avais eu le même problème avec vous, et enfin trouvé la solution pour ces cas.
J'essaie de résoudre le même problème, comme vous, que de calculer lat, long les choses.
Au premier abord, problème est "le Comte de Requête" causés par l'utilisation de Paginable paramètre.
J'ai débogué choses et certains codes comme "lors de l'utilisation de Paginable, générer compter de la requête avec les clauses where, SANS TOUTES les CONDITIONS".
Donc, essayez comme ceci.
OriginalL'auteur NerdHerd
Cause Page besoin d'appeler extra compter de la Requête, mais Liste pas. Cette erreur doit être causé par le comte de la Requête.
Voir ici, la plupart, comme même problème
OriginalL'auteur Yang
J'ai fait face à un même problème. Après quelques try a appris que les Pagination en phases.
Solution : utilisation valeur et countQuery à l'intérieur de @Requête paramètre à utiliser des valeurs de paramètres différentes.
Par Exemple
OriginalL'auteur Nakesh