3 votes

SpringData résultats erronés en utilisant la requête native et la propriété de date

J'utilise Spring Data et j'utilise une requête native :

@Query(value = "SELECT DISTINCT(t.foo_id) FROM t_bar t where time > ?1", nativeQuery = true)
List<String> getFoo(DateTime after);

Par exemple, ceci renvoie 3 les résultats.

Requête native directement dans le serveur mysql :

SELECT DISTINCT(t.foo_id) FROM t_bar t where time > '2016-08-16T11:44:00.002+02:00'

renvoie à 0 les résultats.

Les dates sont égales pour les deux.

Les résultats sont différents de ceux obtenus avec une requête sql pure. time la propriété n'est pas utilisée ou fausse. Qu'est-ce qui est faux ?

Edita:

@Query(value = "SELECT DISTINCT(t.foo_id) FROM t_bar t where time > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL ?1 HOUR)", nativeQuery = true)
List<String> getFoo(int lastHours);

Renvoie des résultats corrects.

Mais le problème persiste, quelle en est la cause ?

0voto

Rahim Dastar Points 1054

Je pense que vous devriez utiliser ?0 au lieu de ?1.

@Query(value = "SELECT DISTINCT(t.foo_id) FROM t_bar t where time > ?0", nativeQuery = true)
List<String> getFoo(DateTime after);

Voici un exemple tiré de http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html :

public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?0", nativeQuery = true)
  User findByEmailAddress(String emailAddress);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X