[英]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
问题是:
非常感谢。
我能够使用下面这样做 - 我只有一个表名自行车有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.