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

Reply via email to