openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF subversion and git services (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OPENJPA-2286) SELECT COUNT with date litteral,used more than once, provokes ArgumentException: Attempt to compare incompatible types class java.util.Date and class org.apache.openjpa.jdbc.sql.Raw
Date Mon, 24 Mar 2014 18:30:43 GMT

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

ASF subversion and git services commented on OPENJPA-2286:
----------------------------------------------------------

Commit 1580973 from [~jpaheath] in branch 'openjpa/branches/2.3.x'
[ https://svn.apache.org/r1580973 ]

OPENJPA-2286: ArgumentException: Attempt to compare incompatible types class java.util.Date
and class org.apache.openjpa.jdbc.sql.Raw

> SELECT COUNT with date litteral,used more than once, provokes ArgumentException: Attempt
to compare incompatible types class java.util.Date and class org.apache.openjpa.jdbc.sql.Raw
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2286
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2286
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: query
>    Affects Versions: 2.2.0
>         Environment: tested with 
> openjpa-all-2.2.0.jar
> openjpa-all-2.3.0-20121019.065014-74.jar
> org.apache.derby.jdbc.ClientDriver
> com.ibm.as400.access.AS400JDBCDriver
>            Reporter: Herman Vierendeels
>             Fix For: 2.4.0
>
>
> a select count with date literal throws exception if used more than once in EntityManagerFactory
> SELECT COUNT(x) FROM TestCountWithDate x WHERE LOWER(x.name) LIKE '%vier%' AND x.adate
=  {d '2007-12-12'}
> INFO: qry_0=SELECT COUNT(x) FROM TestCountWithDate x WHERE LOWER(x.name) LIKE '%vier%'
AND x.adate =  {d '2007-12-12'}
> Exception in thread "main" <openjpa-2.2.0-r422266:1244990 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: Attempt to compare incompatible types "class
java.util.Date" and "class org.apache.openjpa.jdbc.sql.Raw".
> 	at org.apache.openjpa.jdbc.kernel.exps.CompareEqualExpression.appendTo(CompareEqualExpression.java:101)
> 	at org.apache.openjpa.jdbc.kernel.exps.AndExpression.appendTo(AndExpression.java:65)
> 	at org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.buildWhere(SelectConstructor.java:312)
> 	at org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.evaluate(SelectConstructor.java:94)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.createWhereSelects(JDBCStoreQuery.java:360)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.executeQuery(JDBCStoreQuery.java:193)
> 	at org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeQuery(ExpressionStoreQuery.java:783)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
> 	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:286)
> 	at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)
> 	at org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:330)
> 	at client.Client.doQueries(Client.java:51)
> 	at client.Client.main(Client.java:101)
> testprogram
> //export CLASSPATH=$JAVA_HOME/db/lib/derbyclient.jar:/opt/apache-openjpa-2.2.0/openjpa-all-2.2.0.jar:../:~/tmp/build/website1/build/WEB-INF/classes/
> //javac Client.java
> //java  client.Client hoefsmidb
> /*
> create table testCountWithDate(id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY primary
key,Name char(32) not null,aDATE DATE NOT NULL);
> INSERT INTO testCountWithDate(name,aDate) values ('hvieren','2007-12-12');
> INSERT INTO testCountWithDate(name,aDate) values ('vierendeels','2012-10-26');
> INSERT INTO testCountWithDate(name,aDate) values ('tshvr','2012-10-27');
> */
> package client;
> import javax.persistence.EntityManager;
> import javax.persistence.Persistence;
> import javax.persistence.EntityManagerFactory;
> import javax.persistence.Query;
> import java.util.Collection;
> import java.util.List;
> import java.util.logging.*;
> import entities.APP.TestCountWithDate;
> public class Client
> {
>  private static final Logger logger=Logger.getLogger(Client.class.getName());
>  private static EntityManagerFactory emf;
>  private static EntityManager em;
>  private static String qry_0="SELECT COUNT(x) FROM TestCountWithDate x WHERE LOWER(x.name)
LIKE '%vier%' AND x.adate =  {d '2007-12-12'}";
>  private static String qry_1="SELECT x FROM TestCountWithDate AS x WHERE LOWER(x.name)
LIKE '%vier%' AND x.adate =  {d '2007-12-12'}  order by x.id";
>  private static void createTransactionalEntityManager()
>  {
>   em=emf.createEntityManager();
>   em.getTransaction().begin();
>   logger.info("createTransactionalEntityManager done");
>  }
>  private static void closeTransactionalEntityManager()
>  {
>   em.getTransaction().commit();
>   em.close();
>   logger.info("closeTransactionalEntityManager done");
>  }
>  public static String doQueries()
>  {
>   long qry_count=-1;
>   logger.info("qry_0="+qry_0);
>   qry_count=em.createQuery(qry_0,Long.class).getSingleResult();
>   logger.info("qry_count="+qry_count);
>   /***
>    Exception in thread "main" <openjpa-2.2.0-r422266:1244990 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: Attempt to compare incompatible types "class
java.sql.Date" and "class org.apache.openjpa.jdbc.sql.Raw".
> 	at org.apache.openjpa.jdbc.kernel.exps.CompareEqualExpression.appendTo(CompareEqualExpression.java:101)
> 	at org.apache.openjpa.jdbc.kernel.exps.AndExpression.appendTo(AndExpression.java:65)
> 	at org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.buildWhere(SelectConstructor.java:312)
> 	at org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.evaluate(SelectConstructor.java:94)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.createWhereSelects(JDBCStoreQuery.java:360)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.executeQuery(JDBCStoreQuery.java:193)
> 	at org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeQuery(ExpressionStoreQuery.java:783)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
> 	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:286)
> 	at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)
> 	at org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:330)
>   ***/
>   /********
>   logger.info("qry="+qry_1);
>   Query qry=em.createQuery(qry_1);
>   List qry_rslts=qry.getResultList();
>   //if(qry_rslts==null || qry_rslts() !=0)
>   int qry_rslts_size=qry_rslts.size();
>   logger.info("qry_rslts_size="+qry_rslts_size);
>   for(Object o:qry_rslts)
>   {
>    logger.info("o="+o);
>   }//for
>   *******/
>   return("OK");
>  }//doQueries
>  public static void main(String[] args)
>  {
>   String pu_name=args[0];
>   emf=Persistence.createEntityManagerFactory(pu_name);
>   createTransactionalEntityManager();
>   doQueries();
>   closeTransactionalEntityManager();
>   emf.close();
>   emf=Persistence.createEntityManagerFactory(pu_name);
>   createTransactionalEntityManager();
>   doQueries();
>   closeTransactionalEntityManager();
>   createTransactionalEntityManager();
>   doQueries();
>   closeTransactionalEntityManager();
>   System.exit(0);
>  }//main
> }
> ---------------------
> package entities.APP;
> import java.util.*;
> import javax.persistence.*;
> /**
>  * Auto-generated by:
>  * org.apache.openjpa.jdbc.meta.ReverseMappingTool$AnnotatedCodeGenerator
>  */
> @Entity
> @Table(schema="APP", name="testCountWithDate")
> public class TestCountWithDate {
> 	@Basic
> 	@Column(nullable=false)
> 	@Temporal(TemporalType.DATE)
> 	private Date adate;
> 	@Id
> 	private int id;
> 	@Basic
> 	@Column(nullable=false, length=32)
> 	private String name;
> 	public TestCountWithDate() {
> 	}
> 	public TestCountWithDate(int id) {
> 		this.id = id;
> 	}
> 	public Date getAdate() {
> 		return adate;
> 	}
> 	public void setAdate(Date adate) {
> 		this.adate = adate;
> 	}
> 	public int getId() {
> 		return id;
> 	}
> 	public void setId(int id) {
> 		this.id = id;
> 	}
> 	public String getName() {
> 		return name;
> 	}
> 	public void setName(String name) {
> 		this.name = name;
> 	}
> }



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message