For several reasons, I have been using a OJB/MySQL development platform
and everything was going ok. The problem was when I chose to test the same
application with a OJB/MSSQL platform.
Apart of some minor changes, I made it all work except for a class (the
source and OJB description is below) that has a TIMESTAMP/DATETIME mapping
and that also could be NULL (also tried with NOT NULL <=> nullable="false"
and didn't work either).
I tried Google and it seems a MSSQL JDBC driver bug (don't know if it
could be a bug in OJB) but I wonder if anyone has came across with this
problem and solved this or found a way around (please don't tell me I have
to store the day-month-year on 3 database fields for each date :( or change
it to a char/varchar field).
Below is the error (log file) the DAO, OJB descriptor and SQL for the
class in question.
All help/ideas are welcome,
Pedro Salgado
--- LOG FILE
12:46:34,503 - DEBUG org.apache.ojb.broker.accesslayer.StatementManager -
closeResources was called
12:46:34,503 - DEBUG org.apache.ojb.broker.accesslayer.JdbcAccessImpl -
executeInsert : [EMAIL PROTECTED]
12:46:34,503 - DEBUG
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl - SQL:INSERT
INTO REVISIONS
(id,document,title,edition,date_implementation,date_issued,date_approval,dat
e_approval_qa,date_authorization,date_cancelled,date_deadline,originator,app
rover,approver_qa,authorizer,canceller,obs,state,sys_extension) VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
12:46:34,519 - ERROR org.apache.ojb.broker.accesslayer.JdbcAccessImpl -
SQLException during the execution of the insert (for a
pkg.pkg.dao.Revision): [Microsoft][SQLServer 2000 Driver for JDBC]Unable to
determine the type of the specified object.
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unable to
determine the type of the specified object.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown
Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setObject(Unknown
Source)
at
org.apache.ojb.broker.platforms.PlatformDefaultImpl.setObjectForStatement(Un
known Source)
at org.apache.ojb.broker.accesslayer.StatementManager.bindInsert(Unknown
Source)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(Unknown
Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown
Source)
--- Java class
(Date => java.util.Date)
private int id = 0;
private int document = 0;
private String Title = null;
private String Edition = null;
private Date dateImplementation = null;
private Date dateIssued = null;
private Date dateApproval = null;
private Date dateApprovalQA = null;
private Date dateAuthorization = null;
private Date dateCancelled = null;
private Date dateDeadline = null;
private int originator = 0;
private int approver = 0;
private int approverQA = 0;
private int authorizer = 0;
private int canceller = 0;
private String comment = null;
private int State = 0;
private String fileExtension = null;
--- MSSQL SQL
IF EXISTS (SELECT 1 FROM sysobjects WHERE type ='RI' AND
name='REVISIONS_FK_1')
ALTER TABLE REVISIONS DROP CONSTRAINT REVISIONS_FK_1;
IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'REVISIONS')
BEGIN
DECLARE @reftable_7 nvarchar(60), @constraintname_7 nvarchar(60)
DECLARE refcursor CURSOR FOR
select reftables.name tablename, cons.name constraintname
from sysobjects tables,
sysobjects reftables,
sysobjects cons,
sysreferences ref
where tables.id = ref.rkeyid
and cons.id = ref.constid
and reftables.id = ref.fkeyid
and tables.name = 'REVISIONS'
OPEN refcursor
FETCH NEXT from refcursor into @reftable_7, @constraintname_7
while @@FETCH_STATUS = 0
BEGIN
exec ('alter table '[EMAIL PROTECTED]' drop constraint
'[EMAIL PROTECTED])
FETCH NEXT from refcursor into @reftable_7, @constraintname_7
END
CLOSE refcursor
DEALLOCATE refcursor
DROP TABLE REVISIONS
END
CREATE TABLE REVISIONS
(
id INT NOT NULL,
document INT NOT NULL,
title VARCHAR (200) NOT NULL,
edition CHAR (9) NULL,
date_implementation DATETIME NULL,
date_issued DATETIME NULL,
date_approval DATETIME NULL,
date_approval_qa DATETIME NULL,
date_authorization DATETIME NULL,
date_cancelled DATETIME NULL,
date_deadline DATETIME NULL,
originator INT NULL,
approver INT NULL,
approver_qa INT NULL,
authorizer INT NULL,
canceller INT NULL,
obs VARCHAR (200) NULL,
state INT NOT NULL,
sys_extension CHAR (4) NULL,
CONSTRAINT REVISIONS_PK PRIMARY KEY(id)
);
--- OJB class descriptor
<class-descriptor
class="pkg.pkg.dao.Revision"
table="REVISIONS"
>
<field-descriptor
id="1"
name="id"
column="id"
jdbc-type="INTEGER"
nullable="false"
primarykey="true"
autoincrement="true" />
<field-descriptor
id="2"
name="document"
column="document"
jdbc-type="INTEGER"
nullable="false" />
<field-descriptor
id="3"
name="Title"
column="title"
jdbc-type="VARCHAR"
nullable="false" />
<field-descriptor
id="4"
name="Edition"
column="edition"
jdbc-type="CHAR" />
<field-descriptor
id="5"
name="dateImplementation"
column="date_implementation"
jdbc-type="TIMESTAMP" />
<field-descriptor
id="6"
name="dateIssued"
column="date_issued"
jdbc-type="TIMESTAMP" />
<field-descriptor
id="7"
name="dateApproval"
column="date_approval"
jdbc-type="TIMESTAMP" />
<field-descriptor
id="8"
name="dateApprovalQA"
column="date_approval_qa"
jdbc-type="TIMESTAMP" />
<field-descriptor
id="9"
name="dateAuthorization"
column="date_authorization"
jdbc-type="TIMESTAMP"/>
<field-descriptor
id="10"
name="dateCancelled"
column="date_cancelled"
jdbc-type="TIMESTAMP" />
<field-descriptor
id="11"
name="dateDeadline"
column="date_deadline"
jdbc-type="TIMESTAMP" />
<field-descriptor
id="12"
name="originator"
column="originator"
jdbc-type="INTEGER" />
<field-descriptor
id="13"
name="approver"
column="approver"
jdbc-type="INTEGER "/>
<field-descriptor
id="14"
name="approverQA"
column="approver_qa"
jdbc-type="INTEGER" />
<field-descriptor
id="15"
name="authorizer"
column="authorizer"
jdbc-type="INTEGER" />
<field-descriptor
id="16"
name="canceller"
column="canceller"
jdbc-type="INTEGER" />
<field-descriptor
id="17"
name="comment"
column="obs"
jdbc-type="VARCHAR" />
<field-descriptor
id="18"
name="State"
column="state"
jdbc-type="INTEGER"
nullable="false" />
<field-descriptor
id="19"
name="fileExtension"
column="sys_extension"
jdbc-type="CHAR" />
</class-descriptor>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]