You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Jacek Laskowski (JIRA)" <ji...@apache.org> on 2007/03/28 09:56:32 UTC

[jira] Created: (OPENJPA-188) Positional parameters (in)order within query and query.setParameter (in)order

Positional parameters (in)order within query and query.setParameter (in)order
-----------------------------------------------------------------------------

                 Key: OPENJPA-188
                 URL: https://issues.apache.org/jira/browse/OPENJPA-188
             Project: OpenJPA
          Issue Type: Bug
          Components: query
    Affects Versions: 0.9.7
            Reporter: Jacek Laskowski


According to the JPA 1.0 spec - 4.6.4.1 Positional Parameters - p. 90:

Note that the same parameter can be used more than once in the query string and that the ordering of the use of parameters within the query string need not conform to the order of the positional parameters.

So, keeping it in mind, I can't explain why the following fails:

   Query query = em.createQuery("SELECT DISTINCT o FROM Osoba o, IN(o.projekty) p WHERE o.imie LIKE ?2 AND p.rodzajProjektu = ?1");
   query.setParameter(1, RodzajProjektu.OTWARTY);
   query.setParameter(2, "J%");

with the following error:

-------------------------------------------------------------------------------
Test set: pl.jaceklaskowski.jpa.chapter4_6.ConditionalExpressionsTest
-------------------------------------------------------------------------------
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.203 sec <<< FAILURE!
testPositionalParameters(pl.jaceklaskowski.jpa.chapter4_6.ConditionalExpressionsTest) Time elapsed: 0.125 sec  <<< FAILURE!
<4|false|0.9.7-incubating-SNAPSHOT> org.apache.openjpa.persistence.ArgumentException: The parameter "1" is of type "java.lang.String", but the declaration in the query is for type
"pl.jaceklaskowski.jpa.entity.RodzajProjektu".
       at org.apache.openjpa.persistence.QueryImpl.validateParameter(QueryImpl.java:257)
       at org.apache.openjpa.persistence.QueryImpl.validateParameters(QueryImpl.java:237)
       at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:218)
       at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:264)
       at pl.jaceklaskowski.jpa.chapter4_6.ConditionalExpressionsTest.testPositionalParameters(ConditionalExpressionsTest.java:115)

I have tested it out against Hibernate EntityManager 3.3.0.GA and TopLink Essentials 2.0 BUILD 40 and I don't see the trouble there.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (OPENJPA-188) Positional parameters (in)order within query and query.setParameter (in)order

Posted by "Marc Prud'hommeaux (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OPENJPA-188?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12484772 ] 

Marc Prud'hommeaux commented on OPENJPA-188:
--------------------------------------------

What is the type of the "rodzajProjektu" field? If it really is the RodzajProjektu entity, then you cannot compare a String to an Object. If you are wanting to query against a field (e.g., the id field) of the entity, then you would do "p.rodzajProjektu.someField = ?1".

> Positional parameters (in)order within query and query.setParameter (in)order
> -----------------------------------------------------------------------------
>
>                 Key: OPENJPA-188
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-188
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: query
>    Affects Versions: 0.9.7
>            Reporter: Jacek Laskowski
>
> According to the JPA 1.0 spec - 4.6.4.1 Positional Parameters - p. 90:
> Note that the same parameter can be used more than once in the query string and that the ordering of the use of parameters within the query string need not conform to the order of the positional parameters.
> So, keeping it in mind, I can't explain why the following fails:
>    Query query = em.createQuery("SELECT DISTINCT o FROM Osoba o, IN(o.projekty) p WHERE o.imie LIKE ?2 AND p.rodzajProjektu = ?1");
>    query.setParameter(1, RodzajProjektu.OTWARTY);
>    query.setParameter(2, "J%");
> with the following error:
> -------------------------------------------------------------------------------
> Test set: pl.jaceklaskowski.jpa.chapter4_6.ConditionalExpressionsTest
> -------------------------------------------------------------------------------
> Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.203 sec <<< FAILURE!
> testPositionalParameters(pl.jaceklaskowski.jpa.chapter4_6.ConditionalExpressionsTest) Time elapsed: 0.125 sec  <<< FAILURE!
> <4|false|0.9.7-incubating-SNAPSHOT> org.apache.openjpa.persistence.ArgumentException: The parameter "1" is of type "java.lang.String", but the declaration in the query is for type
> "pl.jaceklaskowski.jpa.entity.RodzajProjektu".
>        at org.apache.openjpa.persistence.QueryImpl.validateParameter(QueryImpl.java:257)
>        at org.apache.openjpa.persistence.QueryImpl.validateParameters(QueryImpl.java:237)
>        at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:218)
>        at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:264)
>        at pl.jaceklaskowski.jpa.chapter4_6.ConditionalExpressionsTest.testPositionalParameters(ConditionalExpressionsTest.java:115)
> I have tested it out against Hibernate EntityManager 3.3.0.GA and TopLink Essentials 2.0 BUILD 40 and I don't see the trouble there.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.