如何使用 CreateNativeQuery 从 SQL 数据库值中查询单个值?
Posted
技术标签:
【中文标题】如何使用 CreateNativeQuery 从 SQL 数据库值中查询单个值?【英文标题】:How to use CreateNativeQuery to query single value from SQL database value? 【发布时间】:2011-04-06 11:55:57 【问题描述】:使用 CRUD 并希望访问数据库中的某个值。我尝试的是:
Query query = em.createNativeQuery("select o from Table o where o.IDfield= '938'");
Table o = (Table)query.getSingleResult();
但这失败了。
有什么建议吗?
【问题讨论】:
【参考方案1】:您的选择看起来像一个 jpql 查询,因此当作为本机查询直接传递到数据库时它将不起作用。您可以改用createQuery
方法。更好的是使用在您的实体上声明的命名参数化查询,如下所示:
@Entity
@NamedQueries(@NamedQuery(name="MyEntity.findById", query="select o from MyEntity o where o.IDfield = :id")
public class MyEntity
@Id
private String IDfield;
...
MyEntity entity = (MyEntity)em.createNamedQuery("MyEntity.findById").setParameter("id", "938").getSingleResult();
【讨论】:
另外谢谢,我不知道如何在命名查询中设置参数。使用namedQuery是否优先只是整洁和可重用性问题? Jan Gvdp:命名查询的另一个原因是它们在部署时会检查语法,因此您可能会更容易发现拼写错误。此外,由于查询只被转换为 sql 一次,因此性能应该会有小幅提升。以上是关于如何使用 CreateNativeQuery 从 SQL 数据库值中查询单个值?的主要内容,如果未能解决你的问题,请参考以下文章
在 createNativeQuery 中使用 generate_series 时出错
Hibernate CreateNativeQuery返回空列表
JPA 中的最大打开游标超出异常(使用 createNativeQuery 删除记录)
可以createNativeQuery的EnityManager返回resultClass即dojo类
我的单元测试问题 - Junit - mockito - EntityManager - createNativeQuery