openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kay Wrobel <kay.wro...@gmx.net>
Subject Re: PersistenceException: Invalid character string format for type int
Date Thu, 24 Oct 2013 20:26:52 GMT
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/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>
>> 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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message