-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: possibly bug in using many-to-one in union-subclass
PostPosted: Tue Jun 07, 2005 4:09 pm 
Beginner
Beginner

Joined: Tue Apr 05, 2005 12:09 pm
Posts: 48
Location: Slovakia (SK), Košice (KE)
Hibernate developers and/or gurus, please look at the following code I found suspicious that in Hibernate is bug. From following code the irrelevant properties and mapping was removed (and like that it was also tested). I've spent a whole day solving this problem with no result.

Using "Table per subclass" - Hibernate throws an exception (why?). Using "Table per concrete class" Hibernate runs without problems.

Table per subclass: BLOCK 1 is not commented out, BLOCK 2 is commented out
Table per concrete class: BLOCK 1 is commented out, BLOCK 2 is not commented out

Hibernate version: 3.0.5

Mapping documents:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
   <class name="com.kovine.kfe.dao.TableColumn" table="KFE_TABLE_COLUMN">
      <id name="id" unsaved-value="null" column="TABLE_COLUMN_ID">
         <generator class="sequence">
            <param name="sequence">KFE_TABLE_COLUMN_ID_SEQ</param>
         </generator>
      </id>
   </class>

   <class name="com.kovine.kfe.dao.Widget" table="KFE_WIDGET">
      <id name="id" unsaved-value="null" column="WIDGET_ID">
         <generator class="sequence">
            <param name="sequence">KFE_WIDGET_ID_SEQ</param>
         </generator>
      </id>
      
      <!-- BLOCK 1:
      <joined-subclass name="com.kovine.kfe.dao.WidgetText" table="KFE_WIDGET_TYPE_INPUTTEXT">
         <key column="WIDGET_ID" />
         <many-to-one unique="true" name="tableColumn" class="com.kovine.kfe.dao.TableColumn" cascade="all" column="TABLE_COLUMN_ID" not-null="true" />
      </joined-subclass>
      -->
   </class>

   <!-- BLOCK 2 -->
   <class name="com.kovine.kfe.dao.WidgetType">
      <id name="id" unsaved-value="null" column="WIDGET_TYPE_ID">
         <generator class="sequence">
            <param name="sequence">KFE_WIDGET_ID_SEQ</param>
         </generator>
      </id>
      
      <union-subclass name="com.kovine.kfe.dao.WidgetText" table="KFE_WIDGET_TYPE_INPUTTEXT">
         <many-to-one unique="true" name="tableColumn" class="com.kovine.kfe.dao.TableColumn" cascade="all" column="TABLE_COLUMN_ID" not-null="true" />
      </union-subclass>
   </class>
</hibernate-mapping>


Code between sessionFactory.openSession() and session.close():
none. sessionFactory.openSession() causes exception

Code:
public class WidgetText extends WidgetType {
   private TableColumn tableColumn;
   
   public TableColumn getTableColumn() {
      return tableColumn;
   }
   public void setTableColumn(TableColumn tableColumn) {
      this.tableColumn = tableColumn;
   }
}

public abstract class WidgetType {

   private Integer id;
   
   public Integer getId() {
      return id;
   }
   public void setId(Integer id) {
      this.id = id;
   }
}



Full stack trace of any exception that occurs:
INFO Configuration - Mapping resource: com/kovine/kfe/dao/TableColumn.hbm.xml
INFO HbmBinder - Mapping class: com.kovine.kfe.dao.TableColumn -> KFE_TABLE_COLUMN
INFO HbmBinder - Mapping class: com.kovine.kfe.dao.Widget -> KFE_WIDGET
INFO HbmBinder - Mapping class: com.kovine.kfe.dao.WidgetType -> WidgetType
INFO HbmBinder - Mapping union-subclass: com.kovine.kfe.dao.WidgetText -> KFE_WIDGET_TYPE_INPUTTEXT
INFO Configuration - Configured SessionFactory: null
INFO Configuration - processing extends queue
INFO Configuration - processing collection mappings
INFO Configuration - processing association property references
INFO Configuration - processing foreign key constraints
INFO Dialect - Using dialect: org.hibernate.dialect.Oracle9Dialect
INFO SettingsFactory - Default batch fetch size: 1
INFO SettingsFactory - Generate SQL with comments: disabled
INFO SettingsFactory - Order SQL updates by primary key: disabled
INFO SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
INFO ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
INFO SettingsFactory - Query language substitutions: {}
INFO NamingHelper - JNDI InitialContext properties:{}
INFO DatasourceConnectionProvider - Using datasource: java:comp/env/jdbc/kfe
INFO SettingsFactory - JDBC batch size: 15
INFO SettingsFactory - JDBC batch updates for versioned data: disabled
INFO SettingsFactory - Scrollable result sets: enabled
INFO SettingsFactory - JDBC3 getGeneratedKeys(): disabled
INFO TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
INFO TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
INFO SettingsFactory - Automatic flush during beforeCompletion(): disabled
INFO SettingsFactory - Automatic session close at end of transaction: disabled
INFO SettingsFactory - Cache provider: org.hibernate.cache.EhCacheProvider
INFO SettingsFactory - Second-level cache: enabled
INFO SettingsFactory - Optimize cache for minimal puts: disabled
INFO SettingsFactory - Structured second-level cache entries: enabled
INFO SettingsFactory - Query cache: disabled
INFO SettingsFactory - Statistics: disabled
INFO SettingsFactory - Deleted entity synthetic identifier rollback: disabled
INFO SettingsFactory - Default entity-mode: pojo
INFO SessionFactoryImpl - building session factory
ERROR HibernateUtil - Initial SessionFactory creation failed.
org.hibernate.MappingException: Could not determine type for column TABLE_COLUMN_ID of type org.hibernate.type.ManyToOneType: org.hibernate.MappingException
at org.hibernate.mapping.Column.getSqlTypeCode(Column.java:131)
at org.hibernate.persister.entity.UnionSubclassEntityPersister.generateSubquery(UnionSubclassEntityPersister.java:320)
at org.hibernate.persister.entity.UnionSubclassEntityPersister.<init>(UnionSubclassEntityPersister.java:135)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:61)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:199)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1043)
at com.kovine.kfe.HibernateUtil.<clinit>(HibernateUtil.java:30)
...
Caused by: org.hibernate.MappingException: Unknown entity: com.kovine.kfe.dao.TableColumn
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:489)
at org.hibernate.impl.SessionFactoryImpl.getIdentifierType(SessionFactoryImpl.java:563)
at org.hibernate.type.EntityType.getIdentifierType(EntityType.java:216)
at org.hibernate.type.EntityType.getIdentifierOrUniqueKeyType(EntityType.java:226)
at org.hibernate.type.ManyToOneType.sqlTypes(ManyToOneType.java:29)
at org.hibernate.mapping.Column.getSqlTypeCode(Column.java:124)
... 87 morete.type.ManyToOneType.sqlTypes(ManyToOneType.java:29)
at org.hibernate.mapping.Column.getSqlTypeCode(Column.java:124)
... 87 morere

Name and version of the database you are using:
Oracle 9i (irrelevant)

The generated SQL (show_sql=true):
none

Martin


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 07, 2005 4:20 pm 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
I must admit I find this *extremely* difficult to believe. Are you *sure* the mapping for TableColumn is available?!

Well, if you are absolutely certain, submit to JIRA.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 07, 2005 4:51 pm 
Beginner
Beginner

Joined: Tue Apr 05, 2005 12:09 pm
Posts: 48
Location: Slovakia (SK), Košice (KE)
you see the hibernate mapping. it is exactly copy-paste. I'll take a little more look at it tomorrow to find out some other facts maybe.

good night :)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.