web-dev-qa-db-fra.com

Comment construire une requête d'insertion dans JPA

J'essaie d'insérer des données dans une table comportant des colonnes (NAME, VALUE) with 

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

et obtenir l'exception suivante:

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

De plus, je ne peux pas insérer un enregistrement à l'aide d'une requête native non plus:

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 lancée:

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

La question est:

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

Merci beaucoup.

6
Armine

J'ai résolu le problème.

Selon this ,

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

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

10
Armine

J'ai trouvé deux exemples où l'auteur utilise l'insert dans une requête native ( first et second ). Ensuite, votre requête pourrait être:

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

Essaye ça.

1
Máťa - Stitod.cz