Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
本机查询参数在Java EE中不起作用_Java_Sql_Postgresql_Jakarta Ee_Jpa - Fatal编程技术网

本机查询参数在Java EE中不起作用

本机查询参数在Java EE中不起作用,java,sql,postgresql,jakarta-ee,jpa,Java,Sql,Postgresql,Jakarta Ee,Jpa,我通过Java EE使用JPA,并具有以下本机postgresql查询: @NamedNativeQuery(name = "Player.getStandardDev", query ="SELECT STDDEV(?1) FROM Player WHERE ?2 IS NOT NULL") (我意识到,的检查不是空的可能不需要,但这不是本例中问题的根源) 然后,我有以下代码尝试执行查询: Query query = getEntityManager().createNamedQuery("

我通过Java EE使用JPA,并具有以下本机postgresql查询:

@NamedNativeQuery(name = "Player.getStandardDev", query ="SELECT STDDEV(?1) FROM Player WHERE ?2 IS NOT NULL")
(我意识到,
的检查不是空的
可能不需要,但这不是本例中问题的根源)

然后,我有以下代码尝试执行查询:

Query query = getEntityManager().createNamedQuery("Player.getStandardDev");
query.setParameter(1, attribute);
query.setParameter(2, attribute);
return (BigDecimal) query.getSingleResult();
调用
getSingleResult()
时,我收到以下错误:

org.postgresql.util.PSQLException: ERROR: function stddev(character varying) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.
  Position: 8
我认为这是因为对
setParameter
的调用工作不正常,因此没有替换
s


是否有其他方法可以使用本机查询来设置参数。

发生此错误的原因是,当您为查询设置参数时,它在生成的SQL中作为字符串文字而不是列名进行计算。所以它变成了

SELECT STDDEV('column_name') FROM Player ...
而不是

SELECT STDDEV(column_name) FROM Player ...
这会导致错误,因为函数需要列名或数值

不能在JPA查询中动态设置列名。您必须以某种方式对其进行硬编码,或者使用其他方式构造查询。有关更多详细信息,请参见此