Although nobody responded to my post I guess this bug still exists in Torque. The problem is the way org.apache.torque.om.NumberKey instantiates a BigDecimal for a long key - see Sun's description of the reasons for this behavior - not a bug in their view : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4114020
I fixed NumberKey.java by replacing: public NumberKey(long key) { this.key = new BigDecimal(key); } With: public NumberKey(long key) { this.key = BigDecimal.valueOf(key); } as recommended in the above Sun link. To test this you can use: public static void main(String[] args) { long pk = Long.parseLong("22620000000000031"); SimpleKey sk = SimpleKey.keyFor(pk); System.out.print(sk.getValue()); } Cheers Guy On Wed, 2007-02-21 at 15:30 -0500, Guy Galil wrote: > We are using an old version of Torque - Torque 3.0.2 for a long time > now. > We recently encountered a strange behavior of the retrieveByPK method: > we have a column defined as - > <table name="MYTABLE_LOG" description="Log of dropped and rejected > constructs" idMethod="native"> > <column > name="MYTABLE_LOG_ID" > required="true" > primaryKey="true" > type="BIGINT" > autoIncrement="true"/> > > > .... > > > > The generated sql is - > drop table if exists MYTABLE_LOG; > > CREATE TABLE MYTABLE_LOG > ( > MYTABLE_LOG_ID BIGINT NOT NULL AUTO_INCREMENT, > .... > > the mysql table is actually created with the column type > bigint(20) > > Id values in the database get to be big. > > The problem is when using retrievebypk and the id passed is long. The > method in the base class looks like: > public static MytableLog retrieveByPK(long pk) > throws TorqueException > { > return retrieveByPK(SimpleKey.keyFor(pk)); > } > > looking at the values in a debugger we see: > pk = 22620000000000031 > SimpleKey.keyFor(pk) = 22620000000000032 > and > return retrieveByPK(SimpleKey.keyFor(pk)) either fails fails (failed to > retrieve one > row...) if the record is not found or returns the wrong record (see it > passes the id + 1) > > This problem did not occur when our keys were of type integer. > > Any help will be appreciated > Guy > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]