I have a simple stored procedure I'm using to test out Spring Data JPA Stored Procedure feature.
我有一个简单的存储过程,我用它来测试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;
My code is:
我的代码是:
@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;
}
Everything works fine when I have a single OUT parameter. But once I add a second OUT parameter I get an exception saying it can't find the procedure in the entity.
当我有一个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)
2 个解决方案
#1
5
It looks like @Procedure
expects only one OUT parameter which is binded directly to the method return type...
看起来@Procedure只需要一个OUT参数直接绑定到方法返回类型...
To handle multiple OUT params you can use the JPA API directly:
要处理多个OUT参数,您可以直接使用JPA API:
StoredProcedureQuery proc = em.createNamedStoredProcedureQuery("plus1");
proc.setParameter("arg", 1);
proc.execute();
Integer res1 = (Integer) proc.getOutputParameterValue("res1");
Integer res2 = (Integer) proc.getOutputParameterValue("res2");
...
#2
0
Spring doesn't support multiple out params just yet. There is a JIRA for this.
Spring还不支持多个params。这有一个JIRA。
#1
5
It looks like @Procedure
expects only one OUT parameter which is binded directly to the method return type...
看起来@Procedure只需要一个OUT参数直接绑定到方法返回类型...
To handle multiple OUT params you can use the JPA API directly:
要处理多个OUT参数,您可以直接使用JPA API:
StoredProcedureQuery proc = em.createNamedStoredProcedureQuery("plus1");
proc.setParameter("arg", 1);
proc.execute();
Integer res1 = (Integer) proc.getOutputParameterValue("res1");
Integer res2 = (Integer) proc.getOutputParameterValue("res2");
...
#2
0
Spring doesn't support multiple out params just yet. There is a JIRA for this.
Spring还不支持多个params。这有一个JIRA。