我正在使用jpa 2.1调用postgresql过程,并想将结果集转换为一个名为StoreAndCategoryID的非实体类,该类包含两个整数字段:storeid,categoryid。这两个字段是从过程中返回的字段。

@NamedStoredProcedureQuery(
    name = "Category.func_getcategorybytextsearchid",
    procedureName = "func_getcategorybytextsearchid",
    parameters = {@StoredProcedureParameter(name = "textsearchid", type = Integer.class,
                                            mode = javax.persistence.ParameterMode.IN ),
          @StoredProcedureParameter(name = "mycursor", type = void.class,
                                    mode = ParameterMode.REF_CURSOR )}
)

下面的代码是在Postgresql上执行的proc
CREATE OR REPLACE FUNCTION func_getcategorybytextsearchid(textsearchid integer )
  RETURNS refcursor  AS
$BODY$
declare mycursor refcursor ;
BEGIN
mycursor   = 'mycursor';

OPEN mycursor FOR (
            select storeid, categoryid
            from item_full_text_search
            where itemfulltextsearchid = $1;

RETURN mycursor ;
end;

下面的Java代码显示了我如何调用该过程
StoredProcedureQuery q =
em.createNamedStoredProcedureQuery("Category.func_getcategorybytextsearchid");
q.setParameter("textsearchid", textsearchid);

if (q.execute())
{
   //the result set needs to convert to StoreAndCategoryID class if possible.
   StoreAndCategoryID storeAndCategoryID  =  q.getOutputParameterValue("mycursor");
}

public class StoreAndCategoryID
{
        int storeid;
        int categoryid;
}

如何更改@NamedStoredProcedureQuery以返回/转换非实体类StoreAndCategoryID?

谢谢,

最佳答案

您不能使用StoredProcedureQuery将存储过程结果集映射到非实体类。
但是,如果您要使用(如果可以使用JPQL查询而不是存储过程调用)TypedQuey,则可以使用JPQL constructor expression
NativeQuery中的@SqlResultSetMapping

09-25 17:00