I agree. Can you please create a JIRA?
LieGrue,
strub
----- Original Message -----
From: Kay Wrobel <[email protected]>
To: [email protected]
Cc:
Sent: Thursday, 24 October 2013, 23:20
Subject: Re: PersistenceException: Invalid character string format for
type int
I just confirmed the problem also had existing using MySQL.
I recreated the table and records for DISCOUNT_CODE in a MySQL
database
and had the same exception and the property setting (both versions)
got
rid of the error.
Still, this should default to "false" imho.
On 10/24/2013 04:17 PM, Kay Wrobel wrote:
Ja, I actually used:
<property name="openjpa.jdbc.DBDictionary"
value="storeCharsAsNumbers=false"/>
and that works as well.
On 10/24/2013 03:54 PM, Rick Curtis wrote:
Sorry, I wrote that quickly.... yes it was missing a ')'. If
that
doesn't
work, please collect trace.
<property name="openjpa.jdbc.DBDictionary"
value="derby(
storeCharsAsNumbers=false)"/>
On Thu, Oct 24, 2013 at 3:50 PM, Kay Wrobel <[email protected]>
wrote:
Are you sure value is derby(storeCharsAsNumbers=**false??? That
looks
wrong somehow.
The "(" in there.
On 10/24/2013 03:42 PM, Rick Curtis wrote:
As I suggested on IRC earlier this week, try setting the
following
property
to see if it makes things work...
<property name="openjpa.jdbc.**DBDictionary"
value="derby(**storeCharsAsNumbers=false"/>
If it doesn't work, enable trace and let us take a peek.
<property name="openjpa.Log"
value="DefaultLevel=trace"/>
Thanks,
Rick
On Thu, Oct 24, 2013 at 3:26 PM, Kay Wrobel
<[email protected]>
wrote:
I have to make a correction to the last statement in my
original
post:
The
content values of DISCOUNT_CODE field are /*not*/ of
numeric
value, but
actual characters, such as 'H' or 'M'.
Sorry for causing confusion.
On 10/24/2013 03:17 PM, Mark Struberg wrote:
My finding so far is that the DerbyDictionary doesn't
overwrite
storeCharsAsNumbers, so it's still defaulted to
true.
This code is exactly which trashes in the sample
Caused by: java.sql.SQLDataException: Invalid character
string
format
for
type int.
at
org.apache.derby.client.am.****SQLExceptionFactory40.****
getSQLException(Unknown
Source)
at org.apache.derby.client.am.****
SqlException.getSQLException(****Unknown
Source)
at
org.apache.derby.client.am.****ResultSet.getInt(Unknown
Source)
at
org.apache.commons.dbcp.****DelegatingResultSet.getInt(**
DelegatingResultSet.java:225)
at
org.apache.commons.dbcp.****DelegatingResultSet.getInt(**
DelegatingResultSet.java:225)
at org.apache.openjpa.lib.jdbc.****
DelegatingResultSet.getInt(**
DelegatingResultSet.java:137)
at
org.apache.openjpa.jdbc.sql.****DBDictionary.getInt(**
DBDictionary.java:841)
at
org.apache.openjpa.jdbc.sql.****DBDictionary.getChar(**
DBDictionary.java:740)
at
org.apache.openjpa.jdbc.sql.****ResultSetResult.**
getCharInternal(****ResultSetResult.java:300)
at
org.apache.openjpa.jdbc.sql.****ResultSetResult.**
getObjectInternal(****ResultSetResult.java:377)
The stacktrace is with todays 2.3.x branch snapshot.
DBDictionary#getChar():
public char getChar(ResultSet rs, int column)
throws SQLException {
if (storeCharsAsNumbers)
return (char) getInt(rs, column); <--
line 740 boom
...
The question for me is how Derby usually stores char
fields
internally.
Is our DerbyDictionary just wrong and should it set
storeCharsAsNumbers
to false?
There is of course the option to use @ColumnDefinition
in the
entity.
This should bypass this flag (I hope, didn't test
it yet).
LieGrue,
strub
----- Original Message -----
From: Kay Wrobel <[email protected]>
To: [email protected]
Cc:
Sent: Thursday, 24 October 2013, 22:08
Subject: PersistenceException: Invalid character
string format
for type
int
Dear OpenJPA Dev Team,
I am getting this exception
<https://raw.github.com/****kwrobel/OpenJPA-****
IntExceptionTest/master/**<
https://raw.github.com/**kwrobel/OpenJPA-**IntExceptionTest/master/**>
OpenJPA-IntExceptionTest/****DiscountCode-Exception.txt<htt**
ps://raw.github.com/kwrobel/**OpenJPA-IntExceptionTest/**
master/OpenJPA-**IntExceptionTest/DiscountCode-**Exception.txt<
https://raw.github.com/kwrobel/OpenJPA-IntExceptionTest/master/OpenJPA-IntExceptionTest/DiscountCode-Exception.txt
while reading a simple entity DiscountCode from a
Derby database
called
SAMPLE (ships with Glassfish/NetBeans) called
DISCOUNT_CODE that
has
only two fields:
1. DISCOUNT_CODE CHAR(1) NOT NULL PRIMARY KEY
2. RATE DECIMAL(4,2) NULL
DISCOUNT_CODE maps to type "Character"
and RATE maps to
"BigDecimal". I
set up a Github <https://github.com/kwrobel/****
OpenJPA-IntExceptionTest<
https://github.com/kwrobel/**OpenJPA-IntExceptionTest>
<https**://github.com/kwrobel/OpenJPA-**IntExceptionTest<
https://github.com/kwrobel/OpenJPA-IntExceptionTest>
with a small test project. It's really small
and concise. All
you need
to run this is a running Derby Network server with
the SAMPLE
database
(included on the github), the latest OpenJPA
library (I tested
so far:
2.2.0 shipping with TomEE 1.5.2, 2.2.2 from the
main project
page, and
2.3.0-SNAPSHOT), the derby client driver
(derby.jar,
derbyclient.jar,
derbynet.jar from the main Apache Derby
distribution) and that's
it.
The curious part is that the field DiscountCode,
though a char
field,
contains numeric, integer values. Mark Struberg
seems to have a
hunch
already of what is going on and is able to add some
more insight.
Any input on this is greatly appreciated.
Regards,
Kay Wrobel