You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Craig Russell (JIRA)" <ji...@apache.org> on 2008/01/21 21:14:35 UTC

[jira] Updated: (OPENJPA-497) Incorect handling of temporal parameters in queries

     [ https://issues.apache.org/jira/browse/OPENJPA-497?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Craig Russell updated OPENJPA-497:
----------------------------------

    Attachment: openjpa-497.patch

Please review this patch.

I don't know if the conversion method belongs here or in a different utility class. 

The specification is unclear as to what the appropriate conversions should be, but what's done here seems to be consistent with what other implementations do.

I haven't written any tests to check for correctness. Where should the tests go?

> Incorect handling of temporal parameters in queries
> ---------------------------------------------------
>
>                 Key: OPENJPA-497
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-497
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 1.0.1
>         Environment: Java 1.6
> Glassfish v2
> openjpa-1.0.1-r420667
>            Reporter: Mircea Lazar
>            Priority: Minor
>         Attachments: openjpa-497.patch
>
>
> The entity:
> For an entity:
> @Entity
> class Log{
> 	protected Timestamp startTime;
> }
> given the query
> SELECT al FROM Log al WHERE al.startTime BETWEEN :start AND :end ORDER BY al.id ASC
> If the query is used as:
> query.setParameter("start", start, TemporalType.TIMESTAMP);
> query.setParameter("end", end, TemporalType.TIMESTAMP);
> where start and end are of type java.util.Date, an exception will be thrown:
> org.apache.openjpa.persistence.ArgumentException: The parameter
> "start" is of type "java.util.Date", but the declaration in the query
> is for type "java.sql.Timestamp".
> 	at org.apache.openjpa.persistence.QueryImpl.validateParameter(QueryImpl.java:270)
> 	at org.apache.openjpa.persistence.QueryImpl.validateParameters(QueryImpl.java:257)
> OpenJPA appears to ignore the temporal indications in setParameter because QueryImpl is as this:
> public OpenJPAQuery setParameter(int position, Date value,
>    TemporalType type) {
>    return setParameter(position, value);
> }
> The Date parameter should be converted to Timestamp inside setParameter method.

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