JPA使用参数

时间:2017-05-01 15:02:54

标签: java postgresql jpa plpgsql

我在postgreSQL数据库中有这个程序:

CREATE OR REPLACE FUNCTION getItemsForCategory(categoryId integer)
  RETURNS SETOF ITEM AS $_$
DECLARE
  result ITEM;
BEGIN
  FOR result IN SELECT *
                FROM item it
                  JOIN item_category itcat ON it.id = itcat.item_id WHERE itcat.category_id = categoryId LOOP
    RETURN NEXT result;
  END LOOP;

END; $_$ LANGUAGE 'plpgsql';

使用终端工作得很好,但我使用JPA调用它时遇到了麻烦。这是我的代码片段(4是参数cateforyId的值):

 transactions.begin();
 final StoredProcedureQuery storedProcedureQuery = entityManager.createStoredProcedureQuery("getItemsForCategory");
 storedProcedureQuery.setParameter(1,4).execute();
 final List<ItemEntity> itemEntityList = (List<ItemEntity>) storedProcedureQuery.getResultList();
 transactions.commit();

运行上面的代码后,我收到此错误:

Exception in thread "main" java.lang.IllegalArgumentException: 
You have attempted to set a parameter at position 1 which does not exist in this query string getItemsForCategory

有谁知道如何正确设置参数的值?我也尝试使用0而不是1来设置参数,使用其他数据类型的参数(String,Object)调用setParameter,但每次我收到熟悉的类型的错误,如那里显示的那样。非常感谢你

1 个答案:

答案 0 :(得分:0)

您需要在设置值之前注册参数。

spq.registerStoredProcedureParameter("categoryId", int.class, ParameterMode.IN);

请参阅this link