web-dev-qa-db-ja.com

JPAで挿入クエリを構築する方法

列を持つテーブルにデータを挿入しようとしています(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();

そして、次の例外を取得します。

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

また、ネイティブクエリを使用してレコードを挿入することもできません。

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

別の例外がスローされています:

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

質問は:

  • クエリ文字列の何が問題になっていますか?

どうもありがとう。

7
Armine

問題を解決しました。

this によると、

JPAにはINSERTステートメントはありません。

しかし、ネイティブクエリを使用して問題を解決できました。クエリの最後に、削除することで問題を解決しました。

12
Armine

著者がネイティブクエリで挿入を使用する2つの例を見つけました( first および second )。次に、クエリは次のようになります。

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

これを試して。

1

私は以下を使用してこれを行うことができました-私はちょうど2つのフィールドIDと名前を持つテーブル名バイクを持っていました。以下を使用して、データベースに挿入しました。

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();
0
Rajdeep Singh