[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Re: How to write a finder query that takes a collection para

roist do-not-reply at jboss.com
Wed Mar 7 10:55:46 EST 2007


you may want to check in your server.log (which is quite helpful to me, to understand finding and optimized loading-issues) that the resulting prepared-statement is indeed not what you wanted. 

the resulting statement will be  ... where ID IN (?), which can't work, since   you'd like to have where ID IN(?,?,?) and every parameter filled in. else your db will believe its just one parameter of the ID#type.

a quick and dirty workaround: concatenate the string with some delimiter before passing it to the finder, and write a little database function that explodes your delimiter-seperated list. 

best would of cause be to set up cmr properly - but this seems like hard work for a whole application. 

oracle-compatible where clause+impl:
public xxx findByResourceList (String[] asResourceIDList) {
  |   StringBuffer res = new StringBuffer();
  |   res.append(',');
  |   for(String s: asResourceIDList)
  |     res.append(s).append(',');
  |   return findByResourceListDummy(res.toString());
  | }
  | 
<query>
  |   <query-method>
  |     <method-name>
  |       findByResourceListDummy
  |     </method-name>
  |     <method-params>
  |       <method-param>java.lang.String</method-param>
  |     </method-params>
  |   </query-method>
  | 
  |   <declared-sql>
  |     <where>instr({0}, ',' || id || ',')>0</where>
  |   </declared-sql>
  | </query>	
  | 

though i'm not sure if you can do that function stuff here, it should be possible somewhere;) 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4025841#4025841

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4025841



More information about the jboss-user mailing list