persistance java sql natif de ne pas accepter des paramètres
ma requête est
sql = "SELECT SUM(TOTAL_BYTES_DELIVERED) /SUM(TOTAL_TIME_TAKEN_IN_DELIVERY)
FROM MV_MFT_TRANSFER
WHERE TRANSFER_INITIATION_TIME > :startDate
AND TRANSFER_INITIATION_TIME < :endDate"
Query query = em.createNativeQuery(sql);
query.setParameter("startDate", startDate, TemporalType.DATE);
query.setParameter("endDate", endDate, TemporalType.DATE);
query.getResultList();'
Lorsque je l'exécute, j'obtiens une erreur
SQLExceptionTHrown:
<Sep 11, 2012 12:50:46 PM PDT> <Warning> <EclipseLink> <BEA-2005000> <2012-09-11 12:50:46.893--UnitOfWork(1387841584)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20120804-d768c4f): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Missing IN or OUT parameter at index:: 1
Error Code: 17041
Call: SELECT SUM(TOTAL_BYTES_DELIVERED) / SUM(TOTAL_TIME_TAKEN_IN_DELIVERY) FROM MV_MFT_TRANSFER WHERE TRANSFER_INITIATION_TIME > :startDate AND TRANSFER_INITIATION_TIME < :endDate
Query: DataReadQuery(sql="SELECT SUM(TOTAL_BYTES_DELIVERED) /SUM(TOTAL_TIME_TAKEN_IN_DELIVERY) FROM MV_MFT_TRANSFER WHERE TRANSFER_INITIATION_TIME > :startDate AND TRANSFER_INITIATION_TIME < :endDate")>
***SQLException in init() TRANSFER METRICS BEAN****
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20120804-d768c4f): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Missing IN or OUT parameter at index:: 1
comment est le groupe par liés au manque de paramètres d'entrée
juste parce qu'il y est un
Je suis relativement nouveau à la persistance. Est-il une erreur de syntaxe, je suis en train de faire? J'en ai un similaire bout de code qui fonctionne lorsque la requête est créée à l'aide de em.createQuery() de l'API.
Les deux startDate et endDate sont des objets de type java.sql.La Date et la colonne de la table est également de type Date.
juste parce qu'il y est un
aggregate
fonction n'a pas forcément les moyens qu'elle nécessite un GROUP BY
. Les fonctions d'agrégation souvent (pas toujours) besoin d'un ajout GROUP BY
déclaration.Je suis relativement nouveau à la persistance. Est-il une erreur de syntaxe, je suis en train de faire? J'en ai un similaire bout de code qui fonctionne lorsque la requête est créée à l'aide de em.createQuery() de l'API.
Les deux startDate et endDate sont des objets de type java.sql.La Date et la colonne de la table est également de type Date.
OriginalL'auteur Vinit Asher | 2012-09-11
Vous devez vous connecter pour publier un commentaire.
La solution suivante devrait fonctionner:
Il semble que si vous utilisez les paramètres positionnels il va travailler. Vous ne pouvez pas combiner les paramètres nommés et natif de la requête. Voici quelques liens:
http://java.boot.by/scbcd5-guide/ch08s05.html
http://www.wisegeek.com/what-are-native-queries.htm
Et beaucoup plus, tout simplement google pour: "Seul le paramètre de position de la liaison peut être de façon portable utilisé pour les requêtes".
EDIT: en Plus des liens vers des questions avec des problèmes similaires:
Comment obtenir tous les éléments de requête JDBC
JPA/Hibernate Natif Requêtes ne reconnaissent pas les Paramètres
OriginalL'auteur Ivan Koblik
Cet article a été vraiment utile!
http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-persistence-api-jpa
L'essentiel de l'article est:
Ce sont dangereux requêtes, ne l'utilisez pas! La concaténation de chaîne est mauvais:
Ce sont sûr requêtes.
OriginalL'auteur Gene
En JPA
lorsque vous utilisez ce:
Query query = em.createNativeQuery(sql);
vous devez définir l'index pour définir les paramètres. Notez que votre requête ont plus qu'un seul paramètre.
OriginalL'auteur Morteza Pouladi