我在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”附近的语法不正确。
我该怎么办?
预先感谢您的帮助。