【发布时间】:2015-07-06 02:40:25
【问题描述】:
我有一个简单的存储过程,用于测试 Spring Data JPA 存储过程功能。
create or replace procedure plus1inout (arg in int,res1 out int,res2 out int) is
BEGIN
res1 := arg + 1;
res2 := res1 + 1;
END;
我的代码是:
@Repository
public interface AdjudConverDateSPRepository extends JpaRepository<AdjudConverDateSP, Long> {
@Procedure(name = "plus1")
Object[] plus1(@Param("arg") Integer arg);
}
@Entity
@NamedStoredProcedureQuery(name = "plus1", procedureName = "ADJUD.PLUS1INOUT",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res1", type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res2", type = Integer.class)
})
public class AdjudConverDateSP implements Serializable {
//stub to satisfy hibernate identifier requirement
@Id @GeneratedValue
private Long id;
}
当我有一个 OUT 参数时,一切正常。但是,一旦我添加了第二个 OUT 参数,我就会得到一个异常,说它在实体中找不到该过程。
Caused by:
org.springframework.data.mapping.PropertyReferenceException: No property plus1 found for type AdjudConverDateSP! at
org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75) at
org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) at
org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) at
org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270) at
org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241) at
org.springframework.data.repository.query.parser.Part.<init>(Part.java:76) at
org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:235) at
org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:373) at
org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:353)
【问题讨论】:
-
您使用的是哪个 Spring Data JPA 版本?
-
Spring-Data JPA 1.8.0 版
-
这个github.com/spring-projects/spring-data-examples/issues/80 的git repo 中有一个问题......当他们得到它时这将是答案。
-
您能否尝试将
@Procedure(name = "plus1")替换为@Procedure("plus1inout")或@Procedure(procedureName="plus1inout") -
@HowardWang 评论帮助我解决了类似的错误。我在 (name="proc") 下给出了名字,但是当我给出 @Procedure("proc") 时它起作用了。奇怪!
标签: java hibernate stored-procedures spring-data spring-data-jpa