[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-3799) PersistentSet does not honor hashcode/equals contract when loaded eagerly

Nate Clark (JIRA) noreply at atlassian.com
Thu Feb 23 15:23:48 EST 2012


    [ https://hibernate.onjira.com/browse/HHH-3799?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45665#comment-45665 ] 

Nate Clark commented on HHH-3799:
---------------------------------

David, when Hibernate adds the object to the PersistentSet in the scenarios we're looking at, the actual Hibernate ID is indeed available (we know this because normal scenarios use it), and the persistent surrogate ID used in hashCode() is not available. Why not write hashCode() such that the Hibernate ID is used by preference, and the surrogate ID is only used as a fallback?

So the hashCode() method in the example provided by Gail becomes:
{code}
        @Override
        public int hashCode()
        {
            return 31 * result + (id != null ? id.hashCode() : name.hashCode());
        }
{code}

Am I missing something that makes this approach unattractive?

> PersistentSet does not honor hashcode/equals contract when loaded eagerly
> -------------------------------------------------------------------------
>
>                 Key: HHH-3799
>                 URL: https://hibernate.onjira.com/browse/HHH-3799
>             Project: Hibernate ORM
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1, 3.5.1
>            Reporter: Igor Vaynberg
>            Assignee: Gail Badner
>         Attachments: test.zip
>
>
> when persistent set is loaded eagerly in some situations it calls hashcode on its items before their field values are populated and then uses this incorrect hashcode to store them in the set. this makes set items inaccessible by any collection items that rely on hashcode such as contains(), remove(), etc.
> attached is a simple maven test project that reproduces the error, unzip and mvn test to run the test.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list