Kevin
Lanaghan To: [EMAIL PROTECTED]
cc:
11/21/2001 Subject: integer
03:11 PM
Hey guys, I found what may be a bug
When the value of a INTEGER field in an Oracle record has no value Castor
throws an exception when attempting to iterate through the QueryResults.
The field below which was causing the problem was VERSION. When this field
was set to zero in the oracle table things worked. When it was null the
exception referenced above was thrown. The work around was basically not
to use INTEGER fields in oracle. The version field will be used for
optimistic locking. Oracles DATE field only has resolution to the second
which isn't sufficient for optimistic locking.
***** this doesn't work. Null pointer exception is thrown while
enumerating through the result set
CREATE TABLE ED_BEDS(
ID INTEGER NOT NULL,
VERSION INTEGER,,
BED_NUMBER VARCHAR2(10) NOT NULL,
BED_STATUS VARCHAR2(10),
BED_TYPE VARCHAR2(10) NOT NULL,
TYPE VARCHAR2(10) NOT NULL,
SORT_ORDER NUMBER(2) NOT NULL,
UNIT VARCHAR(10),
PRIMARY KEY(ID)
);
***** this however does. Null pointer exception is thrown while
enumerating through the result set
create table ED_BEDS(
ID number(38,0) NOT NULL,
VERSION number(38,0),
BED_NUMBER VARCHAR2(10) NOT NULL,
BED_STATUS VARCHAR2(10),
BED_TYPE VARCHAR2(10) NOT NULL,
TYPE VARCHAR2(10) NOT NULL,
SORT_ORDER NUMBER(2) NOT NULL,
UNIT VARCHAR(10),
PRIMARY KEY(ID)
);
<class name="vanderbilt.ed.beds.EDBedRec" identity="id" access="db-locked">
<map-to table="ED_BEDS" xml="group"/>
<cache-type type="none"/>
<field name="id" type="long" >
<sql name="ID" type="integer"/>
</field>
<field name="version" type="long">
<sql name="VERSION" type="integer" dirty="check" />
</field>
<field name="bedNumber" type="string">
<sql name="BED_NUMBER" type="varchar" dirty="check" />
</field>
<field name="bedType" type="string">
<sql name="BED_TYPE" type="varchar" dirty="check" />
</field>
<field name="type" type="string">
<sql name="TYPE" type="varchar" dirty="check" />
</field>
<field name="bedStatus" type="string">
<sql name="BED_STATUS" type="varchar" dirty="check" />
</field>
<field name="sortOrder" type="integer">
<sql name="SORT_ORDER" type="integer" dirty="check" />
</field>
</class>
{
try
{
EDBedRec rec;
List list = new Vector(40);
System.out.println("**************** Getting Beds
*****************************" + EDBedDAO.AVAILABLE_ROOMS_QUERY);
PrintWriter writer = new Logger( System.out ).setPrefix( "test"
);
// OQLQuery oql = _db.getOQLQuery(
EDBedDAO.AVAILABLE_ROOMS_QUERY);
OQLQuery oql = _db.getOQLQuery("SELECT p FROM
vanderbilt.ed.beds.EDBedRec p where p.bedStatus = $1 order by
p.sortOrder");
oql.bind("AVL");
_db.begin();
QueryResults results;
results = oql.execute(Database.ReadOnly);
System.out.println("*** ROOMS OQL EXECUTE COMPLETE. BEGIN
ITERATION *********************************");
int i = 0;
while(results.hasMoreElements())
{
System.out.println("$$$$$$$$$$$$$$$ inside beds while loop
################# ");
rec= (EDBedRec)results.next();
System.out.println(rec.toString());
System.out.println("************ ITERATION: " + i++ );
list.add(rec);
}
if(list.isEmpty())
System.out.println("@@@@@@@@@@@@@@ NO ROOM DATA
@@@@@@@@@@@@@@@@@@@@@@@");
_db.commit();
_db.close();
return list;
} catch(ObjectNotFoundException e) {
System.out.println("no bed data " +e.toString());
} catch(Exception e) {
System.out.println("@@@@@@@@@@@ EDWhiteboardDAO: blew up at
hasMoreElements @@@@@@@@@@@@@@@2 " +e.toString() );
e.printStackTrace();
throw e;
}
System.out.println("success");
return null;
}
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev