如何使用 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 中的 sql 注入

可以createNativeQuery的EnityManager返回resultClass即dojo类

我的单元测试问题 - Junit - mockito - EntityManager - createNativeQuery