Return-Path: Delivered-To: apmail-db-torque-user-archive@www.apache.org Received: (qmail 75326 invoked from network); 4 May 2004 14:31:15 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 4 May 2004 14:31:15 -0000 Received: (qmail 67276 invoked by uid 500); 4 May 2004 14:31:03 -0000 Delivered-To: apmail-db-torque-user-archive@db.apache.org Received: (qmail 67231 invoked by uid 500); 4 May 2004 14:31:03 -0000 Mailing-List: contact torque-user-help@db.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Apache Torque Users List" Reply-To: "Apache Torque Users List" Delivered-To: mailing list torque-user@db.apache.org Received: (qmail 67118 invoked from network); 4 May 2004 14:31:02 -0000 Received: from unknown (HELO zwei.siemens.at) (193.81.246.12) by daedalus.apache.org with SMTP; 4 May 2004 14:31:02 -0000 Received: from bavc001a.bav.siemens.ro (pix6-pri.frust.net [193.81.246.198] (may be forged)) by zwei.siemens.at (8.12.9/8.12.8) with ESMTP id i44EV0K0025603 for ; Tue, 4 May 2004 16:31:04 +0200 Received: by bavc001a.bav.siemens.ro with Internet Mail Service (5.5.2653.19) id ; Tue, 4 May 2004 17:28:10 +0300 Message-ID: <21115DCA7CC1D51189F100E0181E406501142A42@bavc001a.bav.siemens.ro> From: Dovlecel Alexandru Ovidiu To: "'Apache Torque Users List'" Subject: RE: hashCode/equals contract broken in BaseObject Date: Tue, 4 May 2004 17:28:09 +0300 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: text/plain; charset="iso-8859-1" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N I think the approach that you provide will not work, because the XOR operation will produce overlapping hashkeys. For example the following two couples will provide the same key, even though they are different objects: (class.hashCode in binary, pk.hashCode in binary) --> object.hashCode (1110, 0001) --> 1111 (1010, 0101) --> 1111 So an object of type identified by 1110 (14) that has the pk.hashCOde equal to 1 WILL BE EQUAL with an object of type identified by 1010 (10) that has the pk.hashcode equal to 5 If I am wrong (I am not too good with the binary operations and the binary format) pls correct me... Enjoy, Alex -----Original Message----- From: Shevek [mailto:shevek@anarres.org] Sent: Tuesday, May 04, 2004 4:22 PM To: Apache Torque Users List Subject: RE: hashCode/equals contract broken in BaseObject On Tue, 4 May 2004, Dovlecel Alexandru Ovidiu wrote: > You can use torque objects as hash keys with one condition: > > all the keys in the hashtable must be instances of the same torque class. > Then you will not have any inconsistency. I know this. However, this is in violation of the equals() contract and causes much breakage. equals() should return true if and only if the objects are equal. I have a requirement to mix class types. I have suggested a fix for this: use getClass().hashCode() ^ key.hashCode() instead of key.hashCode() Then the whole world will work as intended again. S. > -----Original Message----- > From: Shevek [mailto:shevek@anarres.org] > Sent: Tuesday, May 04, 2004 4:07 PM > To: Apache Torque Users List > Subject: hashCode/equals contract broken in BaseObject > > > hashCode and equals in BaseObject rely only on the primary key. This > breaks horribly (violates the general contract of hashCode()/equals()) if > you compare two objects of different classes. > > It MUST compare ob.getClass() as well as ob.getPrimaryKey() and include > ob.getClass().hashCode() in its hashCode() [by xor?] [or something > equivalent]. > > No doubt the reason for this violation is noted in the FAQ, but it seems > worth noting as a serious bug since it means I can't use Torque objects as > hash keys. > > S. > > -- Shevek http://www.anarres.org/ I am the Borg. http://www.gothnicity.org/ --------------------------------------------------------------------- To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org For additional commands, e-mail: torque-user-help@db.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org For additional commands, e-mail: torque-user-help@db.apache.org