[hibernate-issues] [Hibernate-JIRA] Created: (HHH-4832) Secondary tables do not work in JOINED or TABLE_PER_CLASS inheritance strategies

Simon Godden (JIRA) noreply at atlassian.com
Fri Jan 22 10:50:29 EST 2010


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.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list