[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5102) Instances of a subclass can't be loaded
Steve Ebersole (JIRA)
noreply at atlassian.com
Tue Apr 13 10:03:59 EDT 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5102?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=36411#action_36411 ]
Steve Ebersole commented on HHH-5102:
-------------------------------------
Sasa, please give this a go. Thanks!
> 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.x
>
> 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