You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Stanislav Mironov (JIRA)" <ji...@apache.org> on 2011/04/26 14:44:03 UTC
[jira] [Created] (OPENJPA-1985) ClassCastException in
max(Timestamp) function on PostgreSQL
ClassCastException in max(Timestamp) function on PostgreSQL
-----------------------------------------------------------
Key: OPENJPA-1985
URL: https://issues.apache.org/jira/browse/OPENJPA-1985
Project: OpenJPA
Issue Type: Bug
Components: jdbc, kernel
Affects Versions: 2.1.0
Environment: Windows 7 x64, Java 1.6.0_25, PostgreSQL 9.0.4 x64, PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)
Reporter: Stanislav Mironov
Priority: Blocker
Fix For: 2.1.1
Works perfectly in OpenJPA 2.0.1.
Regression in OpenJPA 2.1.0, 100% reproducible exception.
Exception:
SEVERE: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". Check the query syntax for correctness. See nested exception for details.
<openjpa-2.1.0-r422266:1071316 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". 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 org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:343)
... my code ...
Caused by: java.lang.ClassCastException: Cannot convert object
"2011-04-25 15:48:31+02" of type "class org.postgresql.util.PGobject"
into an instance of "class java.sql.Timestamp".
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)
... 12 more
Entity:
@Entity
@Table(name = "headers")
@DataCache(enabled = false)
public class Header {
@Id
@GeneratedValue
private long id;
@Column(nullable = false)
private String code;
@Column(nullable = false)
private int period;
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Timestamp loadTimestamp;
...
}
Table (autogenerated by OpenJPA 2.0.1):
create table public.headers (
id int8 not null,
loadtimestamp abstime not null,
period int4 not null,
code varchar(255) not null,
primary key (id)
);
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Assigned] (OPENJPA-1985) ClassCastException in
max(Timestamp) function on PostgreSQL
Posted by "Michael Dick (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1985?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Dick reassigned OPENJPA-1985:
-------------------------------------
Assignee: Michael Dick
> ClassCastException in max(Timestamp) function on PostgreSQL
> -----------------------------------------------------------
>
> Key: OPENJPA-1985
> URL: https://issues.apache.org/jira/browse/OPENJPA-1985
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc, kernel
> Affects Versions: 2.1.0
> Environment: Windows 7 x64, Java 1.6.0_25, PostgreSQL 9.0.4 x64, PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)
> Reporter: Stanislav Mironov
> Assignee: Michael Dick
> Priority: Blocker
> Fix For: 2.1.1
>
>
> Works perfectly in OpenJPA 2.0.1.
> Regression in OpenJPA 2.1.0, 100% reproducible exception.
> Exception:
> SEVERE: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". Check the query syntax for correctness. See nested exception for details.
> <openjpa-2.1.0-r422266:1071316 nonfatal user error>
> org.apache.openjpa.persistence.ArgumentException: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". 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 org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:343)
> ... my code ...
> Caused by: java.lang.ClassCastException: Cannot convert object
> "2011-04-25 15:48:31+02" of type "class org.postgresql.util.PGobject"
> into an instance of "class java.sql.Timestamp".
> 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)
> ... 12 more
> Entity:
> @Entity
> @Table(name = "headers")
> @DataCache(enabled = false)
> public class Header {
> @Id
> @GeneratedValue
> private long id;
> @Column(nullable = false)
> private String code;
> @Column(nullable = false)
> private int period;
> @Column(nullable = false)
> @Temporal(TemporalType.TIMESTAMP)
> private Timestamp loadTimestamp;
> ...
> }
> Table (autogenerated by OpenJPA 2.0.1):
> create table public.headers (
> id int8 not null,
> loadtimestamp abstime not null,
> period int4 not null,
> code varchar(255) not null,
> primary key (id)
> );
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Resolved] (OPENJPA-1985) ClassCastException in
max(Timestamp) function on PostgreSQL
Posted by "Michael Dick (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1985?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Dick resolved OPENJPA-1985.
-----------------------------------
Resolution: Fixed
Should be fixed now. The latest nightly snapshots should be available tomorrow morning and will have this change.
> ClassCastException in max(Timestamp) function on PostgreSQL
> -----------------------------------------------------------
>
> Key: OPENJPA-1985
> URL: https://issues.apache.org/jira/browse/OPENJPA-1985
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc, kernel
> Affects Versions: 2.1.0
> Environment: Windows 7 x64, Java 1.6.0_25, PostgreSQL 9.0.4 x64, PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)
> Reporter: Stanislav Mironov
> Assignee: Michael Dick
> Priority: Blocker
> Fix For: 2.1.1, 2.2.0
>
>
> Works perfectly in OpenJPA 2.0.1.
> Regression in OpenJPA 2.1.0, 100% reproducible exception.
> Exception:
> SEVERE: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". Check the query syntax for correctness. See nested exception for details.
> <openjpa-2.1.0-r422266:1071316 nonfatal user error>
> org.apache.openjpa.persistence.ArgumentException: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". 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 org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:343)
> ... my code ...
> Caused by: java.lang.ClassCastException: Cannot convert object
> "2011-04-25 15:48:31+02" of type "class org.postgresql.util.PGobject"
> into an instance of "class java.sql.Timestamp".
> 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)
> ... 12 more
> Entity:
> @Entity
> @Table(name = "headers")
> @DataCache(enabled = false)
> public class Header {
> @Id
> @GeneratedValue
> private long id;
> @Column(nullable = false)
> private String code;
> @Column(nullable = false)
> private int period;
> @Column(nullable = false)
> @Temporal(TemporalType.TIMESTAMP)
> private Timestamp loadTimestamp;
> ...
> }
> Table (autogenerated by OpenJPA 2.0.1):
> create table public.headers (
> id int8 not null,
> loadtimestamp abstime not null,
> period int4 not null,
> code varchar(255) not null,
> primary key (id)
> );
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (OPENJPA-1985) ClassCastException in
max(Timestamp) function on PostgreSQL
Posted by "Michael Dick (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1985?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13025585#comment-13025585 ]
Michael Dick commented on OPENJPA-1985:
---------------------------------------
The short answer here is that the table was generated incorrectly on OpenJPA 2.0.1. OPENJPA-1726 changed the default timestamp type from ASBTIME to TIMESTAMP (ABSTIME was deprecated).
As a quick workaround you can either change the table definition (ugly), or add the following property to persistence.xml :
<property name="openjpa.jdbc.DBDictionary" value="postgres(timestampTypeName=ABSTIME)"/>
The real fix will likely be to treat ABSTIME and TIMESTAMP identically.
> ClassCastException in max(Timestamp) function on PostgreSQL
> -----------------------------------------------------------
>
> Key: OPENJPA-1985
> URL: https://issues.apache.org/jira/browse/OPENJPA-1985
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc, kernel
> Affects Versions: 2.1.0
> Environment: Windows 7 x64, Java 1.6.0_25, PostgreSQL 9.0.4 x64, PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)
> Reporter: Stanislav Mironov
> Assignee: Michael Dick
> Priority: Blocker
> Fix For: 2.1.1
>
>
> Works perfectly in OpenJPA 2.0.1.
> Regression in OpenJPA 2.1.0, 100% reproducible exception.
> Exception:
> SEVERE: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". Check the query syntax for correctness. See nested exception for details.
> <openjpa-2.1.0-r422266:1071316 nonfatal user error>
> org.apache.openjpa.persistence.ArgumentException: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". 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 org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:343)
> ... my code ...
> Caused by: java.lang.ClassCastException: Cannot convert object
> "2011-04-25 15:48:31+02" of type "class org.postgresql.util.PGobject"
> into an instance of "class java.sql.Timestamp".
> 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)
> ... 12 more
> Entity:
> @Entity
> @Table(name = "headers")
> @DataCache(enabled = false)
> public class Header {
> @Id
> @GeneratedValue
> private long id;
> @Column(nullable = false)
> private String code;
> @Column(nullable = false)
> private int period;
> @Column(nullable = false)
> @Temporal(TemporalType.TIMESTAMP)
> private Timestamp loadTimestamp;
> ...
> }
> Table (autogenerated by OpenJPA 2.0.1):
> create table public.headers (
> id int8 not null,
> loadtimestamp abstime not null,
> period int4 not null,
> code varchar(255) not null,
> primary key (id)
> );
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (OPENJPA-1985) ClassCastException in
max(Timestamp) function on PostgreSQL
Posted by "Michael Dick (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1985?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Dick updated OPENJPA-1985:
----------------------------------
Fix Version/s: 2.2.0
> ClassCastException in max(Timestamp) function on PostgreSQL
> -----------------------------------------------------------
>
> Key: OPENJPA-1985
> URL: https://issues.apache.org/jira/browse/OPENJPA-1985
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc, kernel
> Affects Versions: 2.1.0
> Environment: Windows 7 x64, Java 1.6.0_25, PostgreSQL 9.0.4 x64, PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)
> Reporter: Stanislav Mironov
> Assignee: Michael Dick
> Priority: Blocker
> Fix For: 2.1.1, 2.2.0
>
>
> Works perfectly in OpenJPA 2.0.1.
> Regression in OpenJPA 2.1.0, 100% reproducible exception.
> Exception:
> SEVERE: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". Check the query syntax for correctness. See nested exception for details.
> <openjpa-2.1.0-r422266:1071316 nonfatal user error>
> org.apache.openjpa.persistence.ArgumentException: Failed to execute query "select max(h.loadTimestamp) from Header h where h.code=?1 and h.period=?2". 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 org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:343)
> ... my code ...
> Caused by: java.lang.ClassCastException: Cannot convert object
> "2011-04-25 15:48:31+02" of type "class org.postgresql.util.PGobject"
> into an instance of "class java.sql.Timestamp".
> 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)
> ... 12 more
> Entity:
> @Entity
> @Table(name = "headers")
> @DataCache(enabled = false)
> public class Header {
> @Id
> @GeneratedValue
> private long id;
> @Column(nullable = false)
> private String code;
> @Column(nullable = false)
> private int period;
> @Column(nullable = false)
> @Temporal(TemporalType.TIMESTAMP)
> private Timestamp loadTimestamp;
> ...
> }
> Table (autogenerated by OpenJPA 2.0.1):
> create table public.headers (
> id int8 not null,
> loadtimestamp abstime not null,
> period int4 not null,
> code varchar(255) not null,
> primary key (id)
> );
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira