6 votes

Comment construire une requête d'insertion en JPA ?

J'essaie d'insérer des données dans un tableau comportant des colonnes (NOM, VALEUR) con

Query query = em.createQuery("INSERT INTO TestDataEntity (NAME, VALUE) VALUES (:name, :value)");
query.setParameter("name", name);
query.setParameter("value", value);
query.executeUpdate();

et j'obtiens l'exception suivante :

ERROR org.hibernate.hql.internal.ast.ErrorCounter - line 1:42: unexpected token: VALUES 

De même, je ne peux pas non plus insérer un enregistrement en utilisant une requête native :

Query query = em.createNativeQuery("INSERT INTO TEST_DATA (NAME, VALUE) VALUES (:name, :value);");
query.setParameter("name", name);
query.setParameter("value", value);
query.executeUpdate();

Une autre exception est levée :

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement

La question est la suivante :

  • Quel est le problème avec la chaîne de requête ?

Merci beaucoup.

10voto

Armine Points 620

J'ai résolu le problème.

Selon ce ,

Il n'y a pas d'instruction INSERT dans JPA.

Mais j'ai pu résoudre le problème avec une requête native : J'ai mis par erreur un ; redondant à la fin de la requête, donc le problème a été résolu en le supprimant.

1voto

J'ai trouvé deux exemples où l'auteur utilise l'insertion dans une requête native ( premièrement y deuxième ). Alors, votre question pourrait être :

Query query = em.createQuery("INSERT INTO TestDataEntity (NAME, VALUE) VALUES (?, ?)");
query.setParameter(1, name);
query.setParameter(2, value);
query.executeUpdate();

Essayez ça.

0voto

Rajdeep Singh Points 1

J'ai réussi à le faire en utilisant la méthode ci-dessous - J'avais simplement une table nommée Bike avec 2 champs id et name . J'ai utilisé la commande ci-dessous pour insérer ces données dans la base de données.

Query query = em.createNativeQuery("INSERT INTO Bike (id, name) VALUES (:id , :name);");
em.getTransaction().begin();
query.setParameter("id", "5");
query.setParameter("name", "Harley");
query.executeUpdate();
em.getTransaction().commit();

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