You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Phil Armour <Ph...@appiancorp.com> on 2004/02/03 02:42:25 UTC

OJB auto-generated Id as Double?

All,

I am having issues with generating id's of type double.  The sql below that should return the max_key from the OJB_HL_SEQ table returns the value: 100001334000 which is larger than an Integer can be.  Thus we use a Double for the id's.  However, the OJB sequence seems to assume the field MAX_KEY is an integer, and therefore throws a Numeric Overflow SQLException as seen in the traces below.  Is this a problem for anyone else and has a fix been discussed?

In the logs below i found it interesting that that ojb seems to be looking for a Long:
	at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getUniqueLong(SequenceManagerHighLowImpl.java:191)
but the Oracle call seems to be looking for an Int:
	at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1551)


[Full Exception Trace]:

1075770103075|0|1|statement|SELECT A0.MAX_KEY,A0.TABLENAME,A0.GRAB_SIZE,A0.VERSION,A0.FIELDNAME FROM
 OJB_HL_SEQ A0 WHERE (A0.TABLENAME LIKE  ? ) AND A0.FIELDNAME LIKE  ? |SELECT A0.MAX_KEY,A0.TABLENAM
E,A0.GRAB_SIZE,A0.VERSION,A0.FIELDNAME FROM OJB_HL_SEQ A0 WHERE (A0.TABLENAME LIKE  'SEQ_TRK_CASE' )
 AND A0.FIELDNAME LIKE  'ID'
java.sql.SQLException: Numeric Overflow
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:285)
        at oracle.jdbc.driver.OracleStatement.getIntValue(OracleStatement.java:3677)
        at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:332)
        at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1551)
        at com.p6spy.engine.spy.P6ResultSet.getInt(P6ResultSet.java:261)
        at org.apache.ojb.broker.util.SqlTypeHelper.getObjectFromColumn(SqlTypeHelper.java:573)
        at org.apache.ojb.broker.util.SqlTypeHelper.getObjectFromColumn(SqlTypeHelper.java:328)
        at org.apache.ojb.broker.util.SqlHelper.getObjectFromColumn(SqlHelper.java:169)
    
...

rethrown as org.apache.ojb.broker.PersistenceBrokerException: Error reading class type: org.apache.ojb.broker.util.sequence.HighLowSequence from result set: Numeric Overflow
        at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectArrayFrom(RowReaderDefaultImpl.java:171)
        at org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterator.java:426)
        at org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:263)
        at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1403)
        at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1563)
        at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1599)
        at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1588)
        at org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQuery(PersistenceBrokerImpl.java:1856)
        at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(DelegatingPersistenceBroker.java:291)
        at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(DelegatingPersistenceBroker.java:291)
        at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getSequence(SequenceManagerHighLowImpl.java:251)
        at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getUniqueLong(SequenceManagerHighLowImpl.java:191)
        at org.apache.ojb.broker.util.sequence.AbstractSequenceManager.getUniqueValue(AbstractSequenceManager.java:125)
        at org.apache.ojb.broker.util.BrokerHelper.getAutoIncrementValue(BrokerHelper.java:303)
        at org.apache.ojb.broker.util.BrokerHelper.getValuesForObject(BrokerHelper.java:349)
        at org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:215)
        at org.apache.ojb.broker.Identity.init(Identity.java:165)
        at org.apache.ojb.broker.Identity.<init>(Identity.java:129)

...

1075770103125|0|1|rollback||
1075770103125|0|0|rollback||
ERROR 2004-02-02 20:01:43,125 services.CaseService@44ac6a:org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: Can not init Identity for given object beans.CaseBean: Could not obtain next object: Error reading class type: org.apache.ojb.broker.util.sequence.HighLowSequence from result set: Numeric Overflow


Regards,
	Phil Armour



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: OJB auto-generated Id as Double?

Posted by Armin Waibel <ar...@apache.org>.
Hi Phil,

Phil Armour wrote:

> All,
> 
> I am having issues with generating id's of type double.

hope I understand your question. You want to use a PK/id field of java 
type double - right?

> The sql below that should return the max_key from the OJB_HL_SEQ table
> returns the value: 100001334000 which is larger than an Integer can be.
> Thus we use a Double for the id's.

Why not using a Long?

> However, the OJB sequence seems to
> assume the field MAX_KEY is an integer, and therefore throws a Numeric
> Overflow SQLException as seen in the traces below.  Is this a problem
> for anyone else and has a fix been discussed?

I think it's a bug in repository_internal.xml. We declare MAX_KEY as 
Integer, but it should be BIGINT.
Does changing of column type for MAX_KEY solve your problem?

regards,
Armin

> 
> In the logs below i found it interesting that that ojb seems to be looking for a Long:
> 	at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getUniqueLong(SequenceManagerHighLowImpl.java:191)
> but the Oracle call seems to be looking for an Int:
> 	at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1551)
> 
> 
> [Full Exception Trace]:
> 
> 1075770103075|0|1|statement|SELECT A0.MAX_KEY,A0.TABLENAME,A0.GRAB_SIZE,A0.VERSION,A0.FIELDNAME FROM
>  OJB_HL_SEQ A0 WHERE (A0.TABLENAME LIKE  ? ) AND A0.FIELDNAME LIKE  ? |SELECT A0.MAX_KEY,A0.TABLENAM
> E,A0.GRAB_SIZE,A0.VERSION,A0.FIELDNAME FROM OJB_HL_SEQ A0 WHERE (A0.TABLENAME LIKE  'SEQ_TRK_CASE' )
>  AND A0.FIELDNAME LIKE  'ID'
> java.sql.SQLException: Numeric Overflow
>         at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
>         at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
>         at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:285)
>         at oracle.jdbc.driver.OracleStatement.getIntValue(OracleStatement.java:3677)
>         at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:332)
>         at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1551)
>         at com.p6spy.engine.spy.P6ResultSet.getInt(P6ResultSet.java:261)
>         at org.apache.ojb.broker.util.SqlTypeHelper.getObjectFromColumn(SqlTypeHelper.java:573)
>         at org.apache.ojb.broker.util.SqlTypeHelper.getObjectFromColumn(SqlTypeHelper.java:328)
>         at org.apache.ojb.broker.util.SqlHelper.getObjectFromColumn(SqlHelper.java:169)
>     
> ...
> 
> rethrown as org.apache.ojb.broker.PersistenceBrokerException: Error reading class type: org.apache.ojb.broker.util.sequence.HighLowSequence from result set: Numeric Overflow
>         at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectArrayFrom(RowReaderDefaultImpl.java:171)
>         at org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterator.java:426)
>         at org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:263)
>         at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1403)
>         at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1563)
>         at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1599)
>         at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1588)
>         at org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQuery(PersistenceBrokerImpl.java:1856)
>         at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(DelegatingPersistenceBroker.java:291)
>         at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(DelegatingPersistenceBroker.java:291)
>         at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getSequence(SequenceManagerHighLowImpl.java:251)
>         at org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.getUniqueLong(SequenceManagerHighLowImpl.java:191)
>         at org.apache.ojb.broker.util.sequence.AbstractSequenceManager.getUniqueValue(AbstractSequenceManager.java:125)
>         at org.apache.ojb.broker.util.BrokerHelper.getAutoIncrementValue(BrokerHelper.java:303)
>         at org.apache.ojb.broker.util.BrokerHelper.getValuesForObject(BrokerHelper.java:349)
>         at org.apache.ojb.broker.util.BrokerHelper.getKeyValues(BrokerHelper.java:215)
>         at org.apache.ojb.broker.Identity.init(Identity.java:165)
>         at org.apache.ojb.broker.Identity.<init>(Identity.java:129)
> 
> ...
> 
> 1075770103125|0|1|rollback||
> 1075770103125|0|0|rollback||
> ERROR 2004-02-02 20:01:43,125 services.CaseService@44ac6a:org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: Can not init Identity for given object beans.CaseBean: Could not obtain next object: Error reading class type: org.apache.ojb.broker.util.sequence.HighLowSequence from result set: Numeric Overflow
> 
> 
> Regards,
> 	Phil Armour
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org