I do not know if JDBC does a code transaction inside that will change =? to IS NULL if the parameter value is NULL, but from the SQL side it is clear that this does not work, so if there is no JDBC code translation in the case of being NULL, JOnAS has to provide changed code generation:
 
If the parameter my be NULL, JOnAS has to generate code that looks like
...AND(theParameterThatCanBeNull=?1)OR((theParameterThatCanBeNull IS NULL)AND(?1 IS NULL))
what means that the equality check has to be more complex since NULL=NULL is FALSE in every DBMS!
 
Any comments welcome.
Markus
 
 
Original Message      
 processed by Tobit InfoCenter 
Subject: 
RE: Jonas & Oracle (17-Aug-2001 11:45)
From:    
[EMAIL PROTECTED]
To:      
[EMAIL PROTECTED]
 

I am posting this again, since I haven't heard back. Did anybody encounter similar error with null values and Jonas generated SQL for Oracle? Any idea how to get around this? Thanks a lot,

 

MIro Halas

 

-----Original Message-----
From: Halas, Miroslav
Sent: Tuesday, August 14, 2001 6:08 PM
To: [EMAIL PROTECTED]
Subject: Jonas & Oracle

 

Hi there,

 

Did anybody see this problem. We are running Joas against Oracle 8.1.7 using Oracle thin driver. Our entity bean is using container managed persistence so Jonas generate the SQL statement (and it works on Interbase, SQLServer & DB2 without any problems). When running against Oracle, the statement didn't return any results

 

The Jonas generated core looks like this (with my comments)

            pStmt = conn.prepareStatement("select DOCTYPE, SCOPE, ID, VERSION, EXTAPP_ID, NAME, DESCRIPTION, BUILTIN, SUSPECT, CREATED, LAST_MODIFIED, SESSION_LOCK, TRANSACTION_LOCK, USER_LOCK_ID, USER_LOCK_SCOPE, VERSION_COMMENTS from T_DOCUMENT_INFO where DOCTYPE=? and SCOPE=? and ID=? and VERSION=? and EXTAPP_ID=?");

            System.out.println("--------------->MHALAS: pk.m_iEntityType = " + pk.m_iEntityType);

            pStmt.setInt(1, pk.m_iEntityType);

            System.out.println("--------------->MHALAS: pk.m_iScopeID = " + pk.m_iScopeID);

            pStmt.setInt(2, pk.m_iScopeID);

            System.out.println("--------------->MHALAS: pk.m_iID = " + pk.m_iID);

            pStmt.setInt(3, pk.m_iID);

            System.out.println("--------------->MHALAS: pk.m_iVersionNum = " + pk.m_iVersionNum);

            pStmt.setInt(4, pk.m_iVersionNum);

            System.out.println("--------------->MHALAS: pk.m_strExtAppID = " + pk.m_strExtAppID);

 

The debug output is as follows

ConnectionImpl.prepareStatement(String select DOCTYPE, SCOPE, ID, VERSION, EXTAPP_ID, NAME, DESCRIPTION, BUILTIN, SUSPEC

T, CREATED, LAST_MODIFIED, SESSION_LOCK, TRANSACTION_LOCK, USER_LOCK_ID, USER_LOCK_SCOPE, VERSION_COMMENTS from T_DOCUME

NT_INFO where DOCTYPE=? and SCOPE=? and ID=? and VERSION=? and EXTAPP_ID=?)

--------------->MHALAS: pk.m_iEntityType = 11

--------------->MHALAS: pk.m_iScopeID = 5000

--------------->MHALAS: pk.m_iID = 5001

--------------->MHALAS: pk.m_iVersionNum = 0

--------------->MHALAS: pk.m_strExtAppID = null

 

Even when I type is Oracle SQL*Plus

select DOCTYPE, SCOPE, ID, VERSION, EXTAPP_ID, NAME, DESCRIPTION, BUILTIN, SUSPEC

T, CREATED, LAST_MODIFIED, SESSION_LOCK, TRANSACTION_LOCK, USER_LOCK_ID, USER_LOCK_SCOPE, VERSION_COMMENTS from T_DOCUMENT_INFO where DOCTYPE=11 and SCOPE=5000 and ID=5001 and VERSION=0 and EXTAPP_ID=null

 

It doesn't return any data and I the correct SQL to return the data is

select DOCTYPE, SCOPE, ID, VERSION, EXTAPP_ID, NAME, DESCRIPTION, BUILTIN, SUSPEC

T, CREATED, LAST_MODIFIED, SESSION_LOCK, TRANSACTION_LOCK, USER_LOCK_ID, USER_LOCK_SCOPE, VERSION_COMMENTS from T_DOCUMENT_INFO where DOCTYPE=11 and SCOPE=5000 and ID=5001 and VERSION=0 and EXTAPP_ID is null

 

Is this problem with Jonas generated code or is it in something else. Thanks a lot for help,

 

Miro Halas

To: [EMAIL PROTECTED] [EMAIL PROTECTED]

Reply via email to