[ 
https://issues.apache.org/jira/browse/OPENJPA-1950?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13885233#comment-13885233
 ] 

Vermeulen commented on OPENJPA-1950:
------------------------------------

Today I tried out the jtds driver 1.3.1 instead of the Microsoft driver and 
this gives the same type of error for a query that returns a date.

> exception when converting datetime2 result from String to java.util.Date (ms 
> sql server) 
> -----------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1950
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1950
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: integration, jdbc, third-party
>    Affects Versions: 2.1.0
>            Reporter: Vermeulen
>             Fix For: 2.1.0
>
>         Attachments: OPENJPA-1950-TestCase.zip
>
>
> OPENJPA-1759 (included in OpenJPA 2.1.0) added support for datetime2 in sql 
> server. Schema generation uses this type instead of datetime which was 
> generated with earlier versions.
> When I have an entity with a java.util.Date column like:
> @Entity
> public class DateTestEntity {
> ...
>       @Temporal(TemporalType.DATE)
>       private Date date;
> ...
> Performing the following query with expected result type java.util.Date fails 
> (also happens with OpenJpa 2.0.0 when there is an existing table column of 
> type datetime2).
>     "SELECT max(z.date) FROM DateTestEntity z" 
> This throws the following exception:
> <openjpa-2.1.0-r422266:1071316 nonfatal user error> 
> org.apache.openjpa.persistence.ArgumentException: Failed to execute query 
> "SELECT max(z.date) FROM DateTestEntity z". Check the query syntax for 
> correctness. See nested exception for details.
>       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:872)
>       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
>       at 
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
>       at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:305)
>       at 
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:319)
>       at DateTest.findMaxDate(DateTest.java:96)
>       at DateTest.testSelectDate(DateTest.java:41)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at junit.framework.TestCase.runTest(TestCase.java:168)
>       at junit.framework.TestCase.runBare(TestCase.java:134)
>       at junit.framework.TestResult$1.protect(TestResult.java:110)
>       at junit.framework.TestResult.runProtected(TestResult.java:128)
>       at junit.framework.TestResult.run(TestResult.java:113)
>       at junit.framework.TestCase.run(TestCase.java:124)
>       at junit.framework.TestSuite.runTest(TestSuite.java:232)
>       at junit.framework.TestSuite.run(TestSuite.java:227)
>       at 
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
>       at 
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
>       at 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: java.lang.ClassCastException: Cannot convert object "2011-02-22 
> 00:00:00.0000000" of type "class java.lang.String" into an instance of "class 
> java.util.Date".
>       at org.apache.openjpa.kernel.Filters.convert(Filters.java:336)
>       at org.apache.openjpa.kernel.Filters.convert(Filters.java:265)
>       at org.apache.openjpa.jdbc.kernel.exps.UnaryOp.load(UnaryOp.java:125)
>       at 
> org.apache.openjpa.jdbc.kernel.ProjectionResultObjectProvider.getResultObject(ProjectionResultObjectProvider.java:78)
>       at 
> org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.getResultObject(QueryImpl.java:2075)
>       at org.apache.openjpa.kernel.QueryImpl.singleResult(QueryImpl.java:1330)
>       at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1242)
>       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007)
>       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
>       ... 25 more
> What is weird is that the query "SELECT z.date FROM DateTestEntity z" does 
> correctly convert to java.util.Date.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to