[hibernate-issues] [Hibernate-JIRA] Created: (HHH-5102) Instances of a subclass can't be loaded

Saša Obradović (JIRA) noreply at atlassian.com
Mon Apr 12 09:46:58 EDT 2010


Instances of a subclass can't be loaded
---------------------------------------

                 Key: HHH-5102
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5102
             Project: Hibernate Core
          Issue Type: Bug
          Components: annotations, core, entity-manager
    Affects Versions: 3.5.0-Final
         Environment: Hibernate 3.5.0-Final, Oracle
            Reporter: Saša Obradović
            Priority: Blocker
         Attachments: acount.jpg, columnnotfoundbug.zip, oracle.sql

For a simple class hierarchy (strategy: joined, using @MappedSuperclass) an instance can't be loaded from the database using the superclass as type:

{{Account account = entityManager.find(Account.class, 404L);}}

This works fine in any Hibernate version prior to the latest and is an obvious bug in 3.5.0-Final.

{quote}
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not load an entity: [hibernatebug.Account#404]
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1179)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:575)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:529)
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
	at $Proxy90.find(Unknown Source)
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
	at $Proxy90.find(Unknown Source)
	at at.ing.diba.service.architektur.BugTest.getSavingsAccount_aroundBody2(BugTest.java:40)
	at at.ing.diba.service.architektur.BugTest$AjcClosure3.run(BugTest.java:1)
	at at.ing.diba.manager.ServiceMethodTracingAspect.traceServiceMethod(ServiceMethodTracingAspect.java:40)
	at at.ing.diba.service.architektur.BugTest.getSavingsAccount(BugTest.java:40)
	at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:158)
Caused by: org.hibernate.exception.GenericJDBCException: could not load an entity: [hibernatebug.Account#404]
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1937)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3270)
	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)
	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)
	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:285)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1080)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:997)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:990)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:554)
	... 47 more
Caused by: java.sql.SQLException: Ungültiger Spaltenname
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3296)
	at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1914)
	at oracle.jdbc.driver.OracleResultSet.getBigDecimal(OracleResultSet.java:2042)
	at org.hibernate.type.BigDecimalType.get(BigDecimalType.java:46)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
	at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105)
	at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2267)
	at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1423)
	at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1351)
	at org.hibernate.loader.Loader.getRow(Loader.java:1251)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:619)
	at org.hibernate.loader.Loader.doQuery(Loader.java:745)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1933)
	... 59 more
{quote}
(''Ungültiger Spaltenname'' means: column not found)

The generated SQL-Statements are different:

3.5.0-Final:
{quote}
    /* load hibernatebug.Account */ select
        account0_.ACC_ID as ACC1_30_0_,
        account0_.ACC_IBAN as ACC2_30_0_,
        account0_.ACC_VERSION as ACC3_30_0_,
        case 
            when account0_1_.SAVACC_ACC_ID is not null then 1 
            when account0_.ACC_ID is not null then 0 
        end as clazz_0_ 
    from
        ACCOUNT account0_ 
    left outer join
        SAVINGS_ACCOUNT account0_1_ 
            on account0_.ACC_ID=account0_1_.SAVACC_ACC_ID 
    where
        account0_.ACC_ID=?
{quote}
3.3.2.GA:
{quote}
    /* load hibernatebug.Account */ select
        account0_.ACC_ID as ACC1_36_0_,
        account0_.ACC_IBAN as ACC2_36_0_,
        account0_.ACC_VERSION as ACC3_36_0_,
        account0_1_.SAVACC_WITHDRAWALLIMIT as SAVACC1_44_0_,
        case 
            when account0_1_.SAVACC_ACC_ID is not null then 1 
            when account0_.ACC_ID is not null then 0 
        end as clazz_0_ 
    from
        ACCOUNT account0_ 
    left outer join
        SAVINGS_ACCOUNT account0_1_ 
            on account0_.ACC_ID=account0_1_.SAVACC_ACC_ID 
    where
        account0_.ACC_ID=?
{quote}

-- 
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