Java 如何使用CreateNativeQuery从SQL数据库值中查询单个值?

Java 如何使用CreateNativeQuery从SQL数据库值中查询单个值?,java,sql,database,nativequery,Java,Sql,Database,Nativequery,使用CRUD并希望访问数据库中的某个值。我尝试的是: Query query = em.createNativeQuery("select o from Table o where o.IDfield= '938'"); Table o = (Table)query.getSingleResult(); 但这失败了 有什么建议吗?您的选择看起来像一个jpql查询,因此当它作为本机查询直接传递到数据库时将无法工作。您可以改用createQuery方法。更好的做法是使用在实体上声明的命名参数化查

使用CRUD并希望访问数据库中的某个值。我尝试的是:

Query query = em.createNativeQuery("select o from Table o where o.IDfield= '938'"); 
Table o = (Table)query.getSingleResult();
但这失败了


有什么建议吗?

您的选择看起来像一个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一次,因此性能应该会有一点改进。