2013-04-27 38 views
14

假设我有以下HQL使用Hibernate两次

EntityManager.createQuery("SELECT a FROM a WHERE a.b = :par OR a.c = :par").setParameter("par", obj); 

似乎不起作用。有没有人有一个想法如何解决这个问题仍然只使用一个参数?

+0

你会得到什么错误? – 2013-04-27 11:20:47

+0

没有错误。 Resultlist只是空的。 – DmiN 2013-04-27 11:21:38

+0

你有有效的数据吗?尝试在persistence.xml中启用 - showsql = true并获取原始sql – Sanath 2013-04-27 11:25:43

回答

20
setParameter(String name,Object val) 

这用于将值绑定到指定参数。但是名称可以在无关紧要的查询中多次出现。因此,请检查一次您是否有真正的查询数据。

查看文档here

从文档

命名查询参数的格式的标记部分正文:在查询字符串名称。通过调用 setParameter(“foo”,foo,Hibernate.INTEGER)将值绑定到整型参数:foo;例如, 。名称可能会在查询字符串中出现多次。

如果仍然ü没有得到结果,那么只用两个人的名字尝试,并设置

EntityManager.createQuery(“选择从其中Ab =:PAR1或AC =:PAR2” ).setParameter(“par1”,obj).setParameter(“par2”,obj);

+0

这是完全正确的。看起来这个查询是有点破的。 DBMS通过本地sql也有一个空的结果列表。 +1为了这个好的描述 – DmiN 2013-04-29 09:55:16