Secondary tables do not work in JOINED or TABLE_PER_CLASS inheritance strategies
--------------------------------------------------------------------------------
Key: HHH-4832
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4832
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.3.2
Environment: Hibernate 3.3.2, Postgres 8.4.2
Reporter: Simon Godden
Attachments: hibernatetest2.tgz
I have a class hierarchy as follows:
{noformat}
Abstract RootClass (Mapped Superclass)
|
\ /
Abstract IntermediateClass (Entity)
| |
\ / \ /
LeafClass (Entity) LeafClass2 (Entity)
{noformat}
The following table shows which attributes are on each class:
||Class||Attribute||Table||
|RootClass|field1|rootclass|
|IntermediateClass|field2|intermediateclass|
|LeafClass|field3|leafclass|
|LeafClass|field4|leafclass2|
|AnotherLeafClass|field5|anotherleafclass|
|AnotherLeafClass|field6|anotherleafclass2|
Using {{InheritanceType.SINGLE_TABLE}}, it works.
Using {{InheritanceType.JOINED}} or {{InheritanceType.TABLE_PER_CLASS}} at the
{{IntermediateClass}} level causes different errors:
Using {{InheritanceType.JOINED}} causes an incorrect insert statement which thinks that
{{field4}} is on table {{leafclass}} rather than {{leafclass2}}:
{noformat}
Hibernate:
insert
into
LeafClass
(field1, field2, field3, field4, id)
values
(?, ?, ?, ?, ?)
Exception in thread "main" [22/01/10 03:17:53:053 GMT] WARN
util.JDBCExceptionReporter: SQL Error: 0, SQLState: null
[22/01/10 03:17:53:053 GMT] ERROR util.JDBCExceptionReporter: Batch entry 0 insert into
LeafClass (field1, field2, field3, field4, id) values (foo1, foo2, foo3, foo4, 1) was
aborted. Call getNextException to see the cause.
[22/01/10 03:17:53:053 GMT] WARN util.JDBCExceptionReporter: SQL Error: 0, SQLState:
42703
[22/01/10 03:17:53:053 GMT] ERROR util.JDBCExceptionReporter: ERROR: column
"field4" of relation "leafclass" does not exist
{noformat}
Using {{InheritanceType.TABLE_PER_CLASS}} causes the following error as the session
factory is built:
{noformat}
[22/01/10 03:06:05:005 GMT] INFO cfg.SettingsFactory: Echoing all SQL to stdout
[22/01/10 03:06:05:005 GMT] INFO cfg.SettingsFactory: Statistics: disabled
[22/01/10 03:06:05:005 GMT] INFO cfg.SettingsFactory: Deleted entity synthetic identifier
rollback: disabled
[22/01/10 03:06:05:005 GMT] INFO cfg.SettingsFactory: Default entity-mode: pojo
[22/01/10 03:06:05:005 GMT] INFO cfg.SettingsFactory: Named query checking : enabled
[22/01/10 03:06:05:005 GMT] INFO impl.SessionFactoryImpl: building session factory
[22/01/10 03:06:06:006 GMT] ERROR hibernate.AssertionFailure: an assertion failure occured
(this may indicate a bug in Hibernate, but is more likely due to unsafe use of the
session)
org.hibernate.AssertionFailure: Table leafclass2 not found
at
org.hibernate.persister.entity.JoinedSubclassEntityPersister.getTableId(JoinedSubclassEntityPersister.java:480)
at
org.hibernate.persister.entity.JoinedSubclassEntityPersister.<init>(JoinedSubclassEntityPersister.java:259)
at
org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:87)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:267)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
at
org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at tests.inheritdomain.SessionManager.initialiseSessionFactory(SessionManager.java:23)
at tests.inheritdomain.SessionManager.openSession(SessionManager.java:14)
at
tests.inheritdomain.TestSecondaryTablesInInheritance.test(TestSecondaryTablesInInheritance.java:20)
at
tests.inheritdomain.TestSecondaryTablesInInheritance.main(TestSecondaryTablesInInheritance.java:44){noformat}
A minimal test case is attached as an maven and eclipse project. mvn test will show the
error. I have not created a test case for each inheritance type - you will have to change
it in the intermediate domain class to see the other error.
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira