[ https://issues.apache.org/jira/browse/OPENJPA-196?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marc Prud'hommeaux resolved OPENJPA-196. ---------------------------------------- Resolution: Fixed Fix Version/s: 0.9.7 > Ease the restrictions on forcing a matche between the number of declared and > assigned positional parameters > ----------------------------------------------------------------------------------------------------------- > > Key: OPENJPA-196 > URL: https://issues.apache.org/jira/browse/OPENJPA-196 > Project: OpenJPA > Issue Type: Improvement > Components: query > Affects Versions: 0.9.0, 0.9.6 > Reporter: Marc Prud'hommeaux > Assigned To: Marc Prud'hommeaux > Priority: Minor > Fix For: 0.9.7 > > Attachments: OPENJPA-196.patch > > > OpenJPA currently enforces that each positional parameter that is assigned in > a query must actually be declared in that query, although the spec doesn't > actually seem to mention that restriction. > As respoted by Dain Sundstorm on the OpenJPA mailing list: > Actually, I think there is a bigger problem... Say I have a query like this: > SELECT x FROM foo AS x WHERE foo.name = ?2 > The org.apache.openjpa.kernel.QueryImpl.assertParameters(...) code assumes > that if I have 1 parameter it is numbered ?1, but in EJB 2.1 this was not a > requirement and there are certification tests that verify you are allowed to > have "unused" parameters (e.g, in my example about ?1 and ?N where N>2 are > all not used). I couldn't find any text in the specification that says that > all all positional parameters must be used in the query, but I did find text > that say the EJB-QL 3.0 language is an extension of the EJB-QL 2.1 language: > "The Java Persistence query language is an extension of the Enterprise Java > Beans query language, EJB QL, definedin[5]." > So I think we must remove the "extra-params" check, but I would be happy with > a "don't check for extra-params flag". > -dain > On Mar 31, 2007, at 8:56 AM, Dain Sundstrom wrote: > I'm working on a CMP 2 implementation that delegates to OpenJPA for > persistence. I'm running into a problem where I get the following exception: > org.apache.openjpa.persistence.ArgumentException : More parameters were > passed to execute() than were declared: 4 parameters were specified for query > execution, but only 2 parameters were declared in the query. > In CMP you declare finder and select methods that have parameters which are > passed into the query engine. You can have as many parameters as you like > but are not required to use them all, but it appears that OpenJPA is > enforcing a restriction where if the EJB-QL text only lists say 2 parameters > and I set 4 I get the above exception. In order of perference: > Is this spec required? If not, can we remove the check? > Is there a way to disable the check? If so, how? > Is there a way to determine the number of paramters a query takes? If so, I > can change my code. > Is there a way to get the ejbql text from a Query object? If so, I'll write a > quick parser to determine number of queries myself. > BTW, I'm currently using 0.9.6. > Thanks, > -dain -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.