2008年10月16日木曜日

S2Daoでの複数パラメータUpdate

規約上できないのね、、、

・DaoのInterfaceは次のようなもの、
int update(SomeEntity entity, Integer version);

・SQLはファイルで、以下のような感じ。
Update xxTable set version = /*version*/ where version = /*entity.version*/123

んで、実行すると以下のようにHashMapの操作中にNPE。

java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:157)
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:730)
at org.seasar.framework.beans.factory.BeanDescFactory.getBeanDesc(BeanDescFactory.java:55)
at org.seasar.dao.node.BindVariableNode.accept(BindVariableNode.java:54)
at org.seasar.dao.node.ContainerNode.accept(ContainerNode.java:34)
at org.seasar.dao.impl.AbstractDynamicCommand.apply(AbstractDynamicCommand.java:66)
at org.seasar.dao.impl.UpdateDynamicCommand.execute(UpdateDynamicCommand.java:39)
at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:53)
at org.seasar.dao.pager.PagerS2DaoInterceptorWrapper.invoke(PagerS2DaoInterceptorWrapper.java:71)
at org.seasar.springframework.batch.dao.BatchStepExecutionDao$$EnhancedByS2AOP$$14eaec9$$MethodInvocation$$update5.proceed(MethodInvocationClassGenerator.java)

 調べてみるとS2Daoではメソッドのパラメータ名が分からないので、2つあるパラメータから適切なものを取得できずにエラーとなっている模様。
 では、@Argsを付けるとうまくいくのかは明日に回そう。

0 件のコメント: