Yea, that’s what I’d love to be able to do.  Unfortunately, this is happening 
inside the DB, so awesome.  I think my strategy is to figure out where this is 
happening while running on the middle tier, where it’s easy to debug.  Then 
perhaps I can get a better idea of what’s likely going on and see if that opens 
up any avenues of attack..

-Hal

On Jan 8, 2014, at 1:14 PM, Rick Curtis <curti...@gmail.com> wrote:

> I'm not certain if DatabaseMetaData has anything to do with what is going
> on. I'm going to suggest to debug down to see what values OpenJPA is
> passing to the PL/Java JDBC driver, and then see what values need to be
> passed in. That might help us understand what is going on.
> 
> 
> On Wed, Jan 8, 2014 at 2:33 PM, Hal Hildebrand <hal.hildebr...@me.com>wrote:
> 
>> Anyone know if java.sql.DatabaseMetaData might have something to do with
>> this?  The implementation that runs in PL/Java, I have the source code to,
>> so I can has change it.
>> 
>> 
>> In particular, I’m suspicious that DatabaseMetaData.getTypeInfo() might be
>> messing with me.
>> 
>> On Jan 8, 2014, at 10:19 AM, Hal Hildebrand <hal.hildebr...@me.com> wrote:
>> 
>>> Sorry I didn’t make that clear.
>>> 
>>> The table is defined to have type “BOOLEAN”.  The Java type is Boolean
>> for the column (the aptly named “boolean_value).  This works, as is, when I
>> from the middle tier -> database, using PostgreSQL JDBC drivers, using
>> OpenJPA, with no changes to the postgres db dictionary.
>>> 
>>> When running inside a stored procedure (using PL/Java), I’m using a
>> different JDBC driver (i.e. the one integrated into PL/Java), and I’m still
>> using OpenJPA.  However, this fails with the stack trace below, complaining
>> the the expression is of type BIT, but the column is defined as type
>> BOOLEAN.
>>> 
>>> On Jan 8, 2014, at 9:53 AM, Rick Curtis <curti...@gmail.com> wrote:
>>> 
>>>> Is the problem that we're calling stmnt.setNull(idx, Types.BOOLEAN); and
>>>> the driver wants us to call stmnt.setNull(idx, Types.BIT);? Just so
>> we're
>>>> on the same page, your Entity has a boolean field that maps to a BIT
>> column?
>>>> 
>>>> 
>>>> On Wed, Jan 8, 2014 at 11:18 AM, Hal Hildebrand <hal.hildebr...@me.com
>>> wrote:
>>>> 
>>>>> I tried this same trick in my app server -> DB test and oddly it had no
>>>>> effect either way.
>>>>> 
>>>>> I’m wondering if I’m actually doing anything here with this property.
>>>>> 
>>>>> I do see the log line:
>>>>> 
>>>>> 
>>>>>    606  CoRE  INFO   [main] openjpa.jdbc.JDBC - Using dictionary
>>>>> class "org.apache.openjpa.jdbc.sql.PostgresDictionary”.
>>>>> 
>>>>> So I’m assuming that this property will in fact, do something to the db
>>>>> dictionary.  But the default already is “BIT”, so it’s unclear that
>> this is
>>>>> where the problem lies.
>>>>> 
>>>>> 
>>>>> On Jan 8, 2014, at 8:29 AM, Hal Hildebrand <hal.hildebr...@me.com>
>> wrote:
>>>>> 
>>>>>> So, I tried it with both “BIT” and “BOOLEAN” with the same result.
>>>>>> 
>>>>>> Wonder where OpenJPA is getting this metadata from?
>>>>>> 
>>>>>> Here’s the stack trace, in case that catches someone’s eye:
>>>>>> 
>>>>>> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: column
>>>>> "boolean_value" is of type boolean but expression is of type bit
>> {prepstmnt
>>>>> 1254242409
>>>>>> INSERT INTO ruleform.job_attribute (id, notes, update_date,
>> binary_value,
>>>>>>   boolean_value, integer_value, numeric_value, sequence_number,
>>>>>>   text_value, timestamp_value, job, updated_by, attribute, unit)
>>>>>> VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
>>>>>> [params=(long) 301, (null) null, (null) null, (null) null, (null)
>> null,
>>>>> (int) 1500, (null) null, (int) 1, (null) null, (null) null, (long) 605,
>>>>> (long) 4, (long) 56, (null) null]} [code=0, state=42804]
>>>>>>  at
>>>>> 
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:219)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:195)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$1000(LoggingConnectionDecorator.java:59)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:1134)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:275)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:275)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1792)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.executeUpdate(PreparedStatementManagerImpl.java:268)
>>>>>>  at
>>>>> 
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:119)
>>>>>> 
>>>>>> On Jan 7, 2014, at 7:31 PM, Rick Curtis <curti...@gmail.com> wrote:
>>>>>> 
>>>>>>> It isn't clear to me what is going on, but with the DBDictionary you
>> can
>>>>>>> change the type of column that boolean / bit field types are mapped
>> to.
>>>>>>> Perhaps you can change the bitTypeName / booleanTypeName to see if
>> you
>>>>> can
>>>>>>> get something working? To change these values you can change the
>> type to
>>>>>>> set the property
>> openjpa.jdbc.DBDictionary=postgres(bitTypeName="BIT").
>>>>>>> 
>>>>>>> HTH,
>>>>>>> Rick
>>>>>>> 
>>>>>>> 
>>>>>>> On Tue, Jan 7, 2014 at 7:38 PM, Hal Hildebrand <
>> hal.hildebr...@me.com
>>>>>> wrote:
>>>>>>> 
>>>>>>>> So, I have a serious problem.  I have tables that are defined to
>> have
>>>>>>>> BOOLEAN columns.  When I run this with PostgreSQL JDBC drivers, from
>>>>> the
>>>>>>>> middle tier, this works just fine.  Everything peachy keen.
>> However….
>>>>>>>> 
>>>>>>>> I’m also running this code inside the database via PL/Java.  When
>>>>> running
>>>>>>>> inside the session as a stored procedure, a different JDBC driver is
>>>>> used -
>>>>>>>> i.e. the one integrated into PL/Java.  This JDBC driver works fine
>> for
>>>>> the
>>>>>>>> most part.  But the problem is that when I try to set NULL to
>> BOOLEAN
>>>>>>>> columns, OpenJPA barfs:
>>>>>>>> 
>>>>>>>> Caused by: <openjpa-2.2.2-r422266:1468616 fatal general error>
>>>>>>>> org.apache.openjpa.persistence.PersistenceException: column
>>>>> "boolean_value"
>>>>>>>> is of type boolean but expression is of type bit {prepstmnt
>> 108675190
>>>>>>>> INSERT INTO ruleform.job_attribute (id, notes, update_date,
>>>>> binary_value,
>>>>>>>>  boolean_value, integer_value, numeric_value, sequence_number,
>>>>>>>>  text_value, timestamp_value, job, research, updated_by,
>>>>> attribute,
>>>>>>>>  unit)
>>>>>>>> VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
>>>>>>>> [params=(long) 1, (null) null, (null) null, (null) null, (null)
>> null,
>>>>>>>> (null) null, (BigDecimal) 1500, (int) 1, (null) null, (null) null,
>>>>> (long)
>>>>>>>> 55, (null) null, (long) 3, (long) 56, (null) null]} [code=0,
>>>>> state=42804]
>>>>>>>> 
>>>>>>>> I have created a test case where I create a simple table with a
>> BOOLEAN
>>>>>>>> column and then use the raw JDBC driver to insert a NULL value into
>> a
>>>>> row
>>>>>>>> when running inside of PL/Java and it just works fine.
>>>>>>>> 
>>>>>>>> So I’m guessing there’s some weird meta data thing going on.  I did
>> a
>>>>> lot
>>>>>>>> of googling to see what I could find out, and basically it seems
>> like
>>>>>>>> there’s an issue with type 2 drivers vs type 3 drivers with
>> PostgreSQL
>>>>> BIT
>>>>>>>> and BOOLEAN.
>>>>>>>> 
>>>>>>>> Thus, the question I have is there some setting in OpenJPA I can
>> use to
>>>>>>>> get around this?  Things seem to turn nightmarish if I convert all
>> my
>>>>>>>> columns to BIT and try to deal with that.  But hey, if there’s a SQL
>>>>> way
>>>>>>>> out of this level of hell, I’ll gladly do that as well.
>>>>>>>> 
>>>>>>>> Any help would be appreciated.
>>>>>>>> 
>>>>>>>> -Hal
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> *Rick Curtis*
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> --
>>>> *Rick Curtis*
>>> 
>> 
>> 
> 
> 
> -- 
> *Rick Curtis*

Reply via email to