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]

Reply via email to