openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de>
Subject Re: PersistenceException: Invalid character string format for type int
Date Thu, 24 Oct 2013 21:20:54 GMT
I agree. Can you please create a JIRA?

LieGrue,
strub




----- Original Message -----
> From: Kay Wrobel <kay.wrobel@gmx.net>
> To: dev@openjpa.apache.org
> 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 <kay.wrobel@gmx.net> 
> 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 
> <kay.wrobel@gmx.net> 
>>>>>  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 <kay.wrobel@gmx.net>
>>>>>>>>  To: dev@openjpa.apache.org
>>>>>>>>  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
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>> 
>> 
> 

Mime
View raw message