繁体   English   中英

如何在 JPA 中构建插入查询

[英]How to construct an insert query in JPA

我正在尝试将数据插入到具有列(NAME, VALUE)的表中

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

问题是:

  • 查询字符串有什么问题?

非常感谢。

我解决了这个问题。

根据

JPA中没有INSERT语句。

但我可以用原生查询来解决这个问题:我错误地提出了多余的问题; 在查询结束时,通过删除它解决了问题。

我找到了两个例子,作者在本机查询中使用插入( 第一个第二个 )。 然后,您的查询可能是:

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

试试这个。

我能够使用下面这样做 - 我只有一个表名自行车有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();

对于手动创建的查询,我们可以使用 EntityManager#createNativeQuery 方法。 它允许我们创建任何类型的 SQL 查询,而不仅仅是 JPA 支持的查询。 让我们向存储库类添加一个新方法:

@Transactional
public void insertWithQuery(Person person) {
    entityManager.createNativeQuery("INSERT INTO person (id, first_name, last_name) VALUES (?,?,?)")
      .setParameter(1, person.getId())
      .setParameter(2, person.getFirstName())
      .setParameter(3, person.getLastName())
      .executeUpdate();
}

使用这种方法,我们需要定义一个包含列名称的文字查询并设置它们对应的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM