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:50:53 GMT
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/**
>>>> 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>
>>>> 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