如何在Java中使用JPA Prepared statement执行插入查询

3
我想知道如何使用预处理语句来进行插入查询。通常对于选择查询,我是按以下方式使用的。
Query query = JPA.em()
    .createNativeQuery("select item_status from item_details where box_id=:boxnumber");
query.setParameter("boxnumber", boxNumber);

但是,当我使用插入查询时,我无法像上面那样使用。

Query query = JPA.em()
    .createNativeQuery("insert into item_details values(':item_status')");
query.setParameter("item_status", itemstat);

我遇到了以下错误:

java.lang.IllegalArgumentException: 
    org.hibernate.QueryParameterException: could not locate named parameter [item_status]
    at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:368) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
    at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]

请有人帮我解决这个问题。提前感谢。


1
可能是JPA/Hibernate原生查询无法识别参数的重复问题。 - default locale
我的疑问是关于插入查询的。选择查询对我来说完美无缺。问题出在插入查询上。 - Kathirvel Appusamy
你尝试过使用那里提出的解决方案吗?它们有效吗?如果没有,你可能想要指明具体哪些地方不如预期。附注:选择查询也是本地的吗? - default locale
是的,选择查询也是本地的。选择查询正常工作。此外,您提到的帖子甚至没有一个插入示例。我尝试了一些可用的示例,但它们也不起作用。 - Kathirvel Appusamy
1
事实证明,实际问题是引用的查询参数。因此,真正的重复在这里 - default locale
显示剩余3条评论
1个回答

1
我没有测试过,但你能试试这个吗;
Query query = JPA.em().createNativeQuery("insert into item_details(item_status) values(?)") .setParameter(1, itemstat).executeUpdate();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接