[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-1460) Inconsistent behavior when using Session.get() with multiple subclasses

Steve Ebersole (JIRA) noreply at atlassian.com
Mon Nov 13 12:28:06 EST 2006


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1460?page=comments#action_25260 ] 

Steve Ebersole commented on HHH-1460:
-------------------------------------

Actually, in thinking about this some more, this should be consistent. 

My comment before was simply that the correct behavior here is clearly to throw an exception.  I mean, this is simply stupid:
Animal a = new Dog(); 
Cat c = ( Cat ) a; // now c is magically set to null

It is difficult to change the scenario where get() leads to the entity being loaded from the database such that it throws a CCE.  

So I'll change this to return null.  Then you can deal with the "consistent behavior" in your code ;)


> Inconsistent behavior when using Session.get() with multiple subclasses
> -----------------------------------------------------------------------
>
>          Key: HHH-1460
>          URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1460
>      Project: Hibernate3
>         Type: Bug

>   Components: core
>     Versions: 3.1.2
>  Environment: Hibernate 3.1.2
> HSQLDB 1.8.0.2
> Java 1.5.0_05-b05
>     Reporter: Seth Fitzsimmons
>  Attachments: ClassCastException.zip
>
>
> Session.get() loads a cached instance of an alternate subclass with the same PK after that subclass has been loaded directly (throwing a ClassCastException where null was expected).  When attempting to load it without prior loading, null is returned, as expected.
> Client and Partner both extend person and have discriminator values of 1 and 2, respectively.  There is a single entry in the database (a Client) with a PK of 0.
> This should be null:
> Partner partner = (Partner) getSession().get(Partner.class, 0);
> assertNull(partner);
> It is.  However, if the Client is loaded first, Hibernate will attempt to return a Partner (as a Client) where it should not exist:
> Client client = (Client) getSession().get(Client.class, 0);
> assertNotNull(client);
>         
> // this should be null, not return a Client object (resulting in a ClassCastException)
> Partner partner = (Partner) getSession().get(Partner.class, 0);
> assertNull(partner);

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira




More information about the hibernate-issues mailing list