[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] JPA Query + enum question
|
This is odd, it could be that the parameters are not transformed when IN is
used. You can confirm this easily by doing a similar query with = and OR
instead of IN. i.e. "r.importStage = :stage1 or r.importStage = :stage2".
If this works, then please log a bug, as IN parameters should be
transformed.
As a workaround us the above, or use the database value instead of the enum
for your parameters.
Leon Derks-2 wrote:
>
> Hi James,
>
> I tried the code, but I get
> Internal Exception: java.sql.SQLException: Invalid column type.
> Error Code: 17004
>
> @NamedQuery(name = "findRequestInProcessingStage", query = "select r
> from ImportRequest r where r.importStage in(:stage1, :stage2)")
>
> SELECT ID, REQUEST_DATE_TIME, REQUESTOR, IMPORT_COMMENT, IMPORT_STAGE,
> STAGE_INFORMATION, NUMBER_OF_ERRORS FROM PLI.PLI_IMPORT_REQUESTS WHERE
> (IMPORT_STAGE IN (?, ?))
> bind => [INIT, TRANSFORMED]
>
> DAO:
> ImportStage[] importStages = new
> ImportStage[ImportStage.getProcessingStages().size()];
> ImportStage.getProcessingStages().toArray(importStages);
> Query query =
> getEntityManager().createNamedQuery("findRequestInProcessingStage");
> query.setParameter("stage1", ImportStage.INIT);
> query.setParameter("stage2", ImportStage.TRANSFORMED);
>
> When I execute the sql in sqlplus, it works fine:
> SELECT ID, REQUEST_DATE_TIME, REQUESTOR, IMPORT_COMMENT, IMPORT_STAGE,
> STAGE_INFORMATION, NUMBER_OF_ERRORS FROM PLI.PLI_IMPORT_REQUESTS WHERE
> (IMPORT_STAGE IN ('INIT', 'TRANSFORMED'))
>
> What am I doing wrong?
> Leon
>
> James Sutherland wrote:
>> You should be able to query on enum types in JPQL, the same as an other
>> basic
>> mapping. JPQL does not allow :list arguments for IN, so you need to
>> define
>> an argument for each value. Technically EclipseLink could support list
>> arguments for IN, but I don't think does yet (although it is supported in
>> Expressions).
>>
>> i.e.
>> @NamedQuery(name = "findRequestInStages", query = "select r from
>> ImportRequest r where r.importStage in (:stage1, :stage2)")
>>
>> getEntityManager().createNamedQuery("findRequestInStages").setParameter("stage1",
>> ImportStage.value1).setParameter("stage2",
>> ImportStage.value2).getResultList();
>>
>>
>> Leon Derks-2 wrote:
>>
>>> Is it possible to query for objects which have some kind of enum type?
>>>
>>> For example :
>>>
>>> @NamedQuery(name = "findRequestInStages", query = "select r from
>>> ImportRequest r where r.importStage in (:stages)")
>>> //importStage is an Java 5 Enum.
>>>
>>> getEntityManager().createNamedQuery("findRequestInStages").setParameter("stages",
>>> importStage is an Java 5 Enum.).getResultList();
>>> //stages is an EnumSet.
>>>
>>> I would like to get all the requests that have one of the given stages.
>>>
>>> How can I do this?
>>>
>>> Leon
>
-----
---
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
--
View this message in context: http://www.nabble.com/JPA-Query-%2B-enum-question-tp17473509p17624034.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.