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

Saša Obradović (JIRA) noreply at atlassian.com
Tue Apr 13 11:28:58 EDT 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5102?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=36416#action_36416 ] 

Saša Obradović commented on HHH-5102:
-------------------------------------

I can confirm the fix, thank you Steve!

> 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ć
>            Assignee: Steve Ebersole
>            Priority: Blocker
>             Fix For: 3.5.1
>
>         Attachments: acount.jpg, columnnotfoundbug.zip, oracle.sql
>
>          Time Spent: 1h 37m
>  Remaining Estimate: 0h
>
> 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