Java 两次使用hibernate命名参数

Java 两次使用hibernate命名参数,java,hibernate,jpa,Java,Hibernate,Jpa,假设我有以下HQL EntityManager.createQuery("SELECT a FROM a WHERE a.b = :par OR a.c = :par").setParameter("par", obj); 似乎不起作用。有没有人知道如何解决这个问题,只使用一个参数 setParameter(String name,Object val) 这用于将值绑定到命名参数。但是一个名称可以在一个查询中多次出现,这并不重要。所以,检查一下您是否真的有用于该查询的数据 检查文档 该文档中

假设我有以下HQL

EntityManager.createQuery("SELECT a FROM a WHERE a.b = :par OR a.c = :par").setParameter("par", obj);
似乎不起作用。有没有人知道如何解决这个问题,只使用一个参数

setParameter(String name,Object val)
这用于将值绑定到命名参数。但是一个名称可以在一个查询中多次出现,这并不重要。所以,检查一下您是否真的有用于该查询的数据

检查文档

该文档中的一些主要文本

命名查询参数是查询字符串中形式为:name的标记。通过调用 setParameter(“foo”,foo,Hibernate.INTEGER); 例如名称可能会在查询字符串中出现多次

如果你仍然没有得到结果,那就试着用两个名字并设置它

EntityManager.createQuery(“从a中选择a,其中a.b=:par1或a.c=:par2”).setParameter(“par1”,obj).setParameter(“par2”,obj)


替换查询中指定的所有出现的名称。

出现了什么错误?没有错误。结果列表为空。是否有有效数据?尝试在persistence.xml中启用-showsql=true,并获取有效的原始sqlData。当我只使用“or”的左侧或右侧时,一切都正常工作,我很确定它会将第一个参数设置为右侧,然后只执行查询而不执行第二个参数。您可以设置参数,如
*。setParameter(0,par)
*。setParameter(1,par)
这完全正确。看起来这个问题有点不对劲。DBMS通过本机sql也有一个空的结果列表+1对于这一良好的描述
setParameter(String name,Object val)