命名参数[XXX]未在此过程调用中注册。

huangapple go评论64阅读模式
英文:

Named parameter [XXX] is not registered with this procedure call

问题

我从Spring Boot调用一个过程。
遇到以下异常:

java.lang.IllegalArgumentException: 未向此过程调用注册命名参数[B]

我有这个实体类:

@Entity
@NamedStoredProcedureQuery(name = NamedStoredProcedure.MyProc, procedureName = Procedures.MyProc, resultClasses = MyProcResult.class, parameters = {
		@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.A, type = String.class),
		@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.B, type = String.class)
})
public class CallProc{
.
.
}

我正在发送所需的参数:

StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createNamedStoredProcedureQuery(NamedStoredProcedure.MyProc);
		publishedSessionStoredProcedure.setParameter(ParameterName.A, a);
		publishedSessionStoredProcedure.setParameter(ParameterName.B, b);

在过程中,也需要相同数量和类型的参数。

可能的原因是什么?

英文:

I am calling a procedure from Spring Boot.
Getting following exception:

java.lang.IllegalArgumentException: Named parameter [B] is not registered with this procedure call

I have this entity class:

@Entity
@NamedStoredProcedureQuery(name = NamedStoredProcedure.MyProc, procedureName = Procedures.MyProc, resultClasses = MyProcResult.class, parameters = {
		@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.A, type = String.class),
		@StoredProcedureParameter(mode = ParameterMode.IN, name = ParameterName.B, type = String.class)
})
public class CallProc{
.
.
}

I am sending required parameters:

StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createNamedStoredProcedureQuery(NamedStoredProcedure.MyProc);
		publishedSessionStoredProcedure.setParameter(ParameterName.A, a);
		publishedSessionStoredProcedure.setParameter(ParameterName.B, b);

In procedure, also same no and type of parameters are expected.

What can be the reason ?

答案1

得分: 10

我遇到了完全相同的问题,我选择使用'createStoredProcedureQuery'而不是'createNamedStoredProcedureQuery'。

尝试添加这些行:

.registerStoredProcedureParameter(ParameterName.A,String.class,ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B,String.class,ParameterMode.IN)
然后你的代码应该看起来像这样:

StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createStoredProcedureQuery(NamedStoredProcedure.MyProc,MyProcResult.class)
.registerStoredProcedureParameter(ParameterName.A,String.class,ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B,String.class,ParameterMode.IN);
publishedSessionStoredProcedure.setParameter(ParameterName.A,a);
publishedSessionStoredProcedure.setParameter(ParameterName.B,b);

对我来说,注册参数解决了问题,希望它对你也有效。

附言:
我还必须为我的对象添加SqlResultSetMapping(在你的情况下是MyProcResult)。

英文:

I had the same exact issue, I chose to use 'createStoredProcedureQuery' instead of 'createNamedStoredProcedureQuery'

Try adding these lines:

.registerStoredProcedureParameter(ParameterName.A, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(ParameterName.B, String.class, ParameterMode.IN)

Then your code should look something like this:

StoredProcedureQuery publishedSessionStoredProcedure = entityManager.createStoredProcedureQuery(NamedStoredProcedure.MyProc, MyProcResult.class)    
       .registerStoredProcedureParameter(ParameterName.A, String.class, ParameterMode.IN)
       .registerStoredProcedureParameter(ParameterName.B, String.class, ParameterMode.IN);
    publishedSessionStoredProcedure.setParameter(ParameterName.A, a);
    publishedSessionStoredProcedure.setParameter(ParameterName.B, b);

For me registering the parameter did the trick hope it'll work for you 2

P.S.
I also had to add SqlResultSetMapping for my object (in your case MyProcResult)

huangapple
  • 本文由 发表于 2020年4月10日 23:39:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/61143695.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定