从JPA调用MS SQL函数

时间:2019-02-21 12:33:18

标签: sql-server hibernate jpa jpa-2.1

我在MS SQL中有一个功能,如:

CREATE FUNCTION FOO (@param1 int,@param2 int)
RETURNS table
AS
    RETURN (SELECT a, b, c
            FROM MyTable
            WHERE p = @param1
              AND (@param2 IS NULL
                OR x = @param2));

和诸如以下的实体类:

    @Entity
    @SqlResultSetMappings=(value={
       @SqlResultSetMapping(
          name="fooMapping"
          classes=@ConstructorResult(
             targetClass=Foo.class,
             columns= {
                @ColumnResult(name="a", type=Long.class),
                @ColumnResult(name="b", type=Long.class),
                @ColumnResult(name="c", type=Long.class)}
          )
@NamedNativeQuery(
  name="getFoos",
  query="CALL FOO(:param1, :param2) ORDER BY c",
  resultSetMappings="fooMapping",
  callable=true)
public class Foo {
   ...
}

当我尝试使用以下方法调用函数时:

TypedQuery<Foo> query = em.createNamedQuery("getFoos", Foo.class);
query.setParameter("param1", param1);
query.setParameter("param2", null);
List<Foo> result = query.getResultList();

然后我得到SQLServerException:

  

“ @ P0”附近的语法不正确。

我该怎么办?

预先感谢您的帮助。

0 个答案:

没有答案