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