Re: HELP: really and truly stuck - Mailing list pgsql-jdbc

From Dave Cramer
Subject Re: HELP: really and truly stuck
Date
Msg-id 6FDA47F8-206A-47CE-9EA7-D5F0C733916A@fastcrypt.com
Whole thread Raw
In response to HELP: really and truly stuck  (csimam@gmail.com)
List pgsql-jdbc
Since the defined jdbc specification is to use setNull I'd complain
to the ejb entity manager.

Dave
On 1-Mar-07, at 2:21 PM, csimam@gmail.com wrote:

> Hello,
>
> This is a posting I made on Sun's web site, and I've researched the
> issue enough to believe that it is due to the behavior of PostgreSQL's
> JDBC driver. If you can help me at all, that would be great; my eyes
> are really tired from the amount of effort I have put into this in the
> last couple of days. And I can't find a solution...
>
> I have a table with some columns that allow null values. From within
> my Java code, I have an EJB3 entity which models that table. I know
> that the overall code works because in the beginning I did not allow
> null values at the database level (using NOT NULL), and everything
> worked fine. But after changing the database to allow null values, I
> ran into the following problem.
>
> If the entity has null values for some of its fields, when I call
> persist() on the entity manager, I get the following exception (which
> I have edited to only show one of the fields for brevity):
>
> Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.4 (Build
> 060412)): oracle.toplink.essentials.exceptions.DatabaseException
>
> Internal Exception: org.postgresql.util.PSQLException: ERROR: column
> "pools" is of type smallint but expression is of type character
> varyingError Code: 0
>
> Call:INSERT INTO MYTABLE (POOLS) VALUES (?)
>         bind => [null]
> Query:InsertObjectQuery(aaacs.rex.ejb.entities.MyTable@10b287f)
>
> The type of the column "pools" is "smallint".
>
> The underlying database is PostgreSQL 8.1.4, and I am using the latest
> JDBC driver (8.2.504) - I was using the 8.1.407 driver and it made no
> difference on the upgrade. I am using the Sun 9.0 application server.
>
> I searched on the internet for clues to this problem, and found more
> than one post that indicate that the PostgreSQL JDBC driver - and in
> fact other JDBC drivers - may be trying to interpret "null" as a
> number (again, that is the type of the column "pools"). Therefore it
> fails. If I were using plain JDBC it would be easy to solve this
> problem because I would use "setNull()" explicitly.
>
> The problem is that I am using EJB3, which means all I can do is call
> persist on the manager - I do not have finegrained control over what
> the container is doing actually.
>
> Can anyone help here? I am really stuck. I know that another solution
> would be to explicitly cast the value inside the SQL insert, but
> again, I have no access to the query because it is being constructed
> by the container...
>
> Many thanks in advance for any and all advice.
>
> -A
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
>        choose an index scan if your joining column's datatypes do not
>        match
>


pgsql-jdbc by date:

Previous
From: csimam@gmail.com
Date:
Subject: HELP: really and truly stuck
Next
From: Tim Pizey
Date:
Subject: Re: how to continue using a connection after an error with autocommit=false