2011-04-06 30 views

回答

0

您的选择看起来像是一个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(); 
+0

非常感谢,createQuery的作品。 – 2011-04-07 09:27:15

+0

也谢谢,我不知道如何在指定的查询中设置参数。 它使用namedQuery优先是只是一个整洁和可重用性? – 2011-04-07 09:33:33

+0

Jan Gvdp:命名查询的另一个原因是他们在部署时检查语法,因此您可能更容易发现拼写错误。此外,应该有一个小的性能改进,因为查询只能转换为SQL一次。 – 2011-04-07 11:15:32