| I have two tables in a master/detail configuration pm_project_revision and pm_task. In my classes ProjectRevisionTo has an array list of tasks. I want to use an order list for the tasks. When I save the revision the index column in the pm_task table is not saved. So when I try to obtain the revision I get null index column for collection.
 Hibernate version: 3.1.3
 
 Mapping documents:
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping>
 <class name="ve.com.tcs.pm.to.ProjectRevisionTo" table="pm_project_revision" lazy="false">
 <id name="id" column="id" type="long" unsaved-value="0">
 <generator class="sequence">
 <param name="sequence">pm_sequence</param>
 </generator>
 </id>
 <property name="revision"        column="revision"          type="long"/>
 <property name="author"          column="author"            type="string"/>
 <property name="startDate"       column="start_date"        type="timestamp"/>
 <property name="endDate"         column="end_date"          type="timestamp"/>
 <property name="duration"        column="duration"          type="double"/>
 <property name="actualStartDate" column="actual_start_date" type="timestamp"/>
 <property name="actualEndDate"   column="actual_end_date"   type="timestamp"/>
 <property name="actualDuration"  column="actual_duration"   type="double"/>
 <property name="latest"          column="latest"            type="yes_no"/>
 <many-to-one name="project"      column="project_id" class="ve.com.tcs.pm.to.ProjectTo" cascade="save-update"/>
 <list name="tasks" table="pm_task" lazy="true" cascade="all-delete-orphan" inverse="true">
 <key column="project_revision_id"/>
 <index column="order_seq"/>
 <one-to-many class="ve.com.tcs.pm.to.TaskTo"/>
 </list>
 </class>
 </hibernate-mapping>
 
 <hibernate-mapping>
 <class name="ve.com.tcs.pm.to.TaskTo" table="pm_task" lazy="false">
 <id name="id" column="id" type="long" unsaved-value="0">
 <generator class="sequence">
 <param name="sequence">pm_sequence</param>
 </generator>
 </id>
 <property name="name"               column="name" type="string"/>
 <property name="startDate"          column="start_date" type="timestamp"/>
 <property name="endDate"            column="end_date" type="timestamp"/>
 <property name="duration"           column="duration" type="double"/>
 <property name="actualStartDate"    column="actual_start_date" type="timestamp"/>
 <property name="actualEndDate"      column="actual_end_date" type="timestamp"/>
 <property name="actualDuration"     column="actual_duration" type="double"/>
 <property name="actualCost"         column="actual_cost" type="double"/>
 <property name="plannedValue"       column="planned_value" type="double"/>
 <property name="earnedValue"        column="earned_value" type="double"/>
 <many-to-one name="revision"        column="project_revision_id" class="ve.com.tcs.pm.to.ProjectRevisionTo"/>
 <many-to-one name="parent"          column="parent_id"           class="ve.com.tcs.pm.to.TaskTo"/>
 <bag name="children" table="pm_task" lazy="true" cascade="all-delete-orphan" inverse="true">
 <key column="parent_id"/>
 <!-- index column="order_seq"/ -->
 <one-to-many class="ve.com.tcs.pm.to.TaskTo"/>
 </bag>
 <list name="predecessors" table="pm_task_dependency" lazy="true" cascade="all-delete-orphan">
 <key column="successor_task_id"/>
 <index column="order_seq"/>
 <many-to-many class="ve.com.tcs.pm.to.TaskTo" column="predecessor_task_id"/>
 </list>
 <list name="successors" table="pm_task_dependency" lazy="true" cascade="none">
 <key column="predecessor_task_id"/>
 <index column="order_seq"/>
 <many-to-many class="ve.com.tcs.pm.to.TaskTo" column="successor_task_id"/>
 </list>
 </class>
 </hibernate-mapping>
 
 Code between sessionFactory.openSession() and session.close():
 
 revision = (ProjectRevisionTo) session.createQuery ("from ProjectRevisionTo where id = ?").setLong (0, id).uniqueResult ();
 if (revision != null)
 {
 Hibernate.initialize (revision.getTasks ());
 
 iterator = revision.getTasks ().iterator ();
 while (iterator.hasNext ())
 {
 task = (TaskTo) iterator.next ();
 
 Hibernate.initialize (task.getChildren ());
 }
 }
 
 Full stack trace of any exception that occurs:
 
 rg.hibernate.HibernateException: null index column for collection: ve.com.tcs.pm.to.ProjectRevisionTo.tasks
 
 at org.hibernate.persister.collection.AbstractCollectionPersister.readIndex(AbstractCollectionPersister.java:652)
 
 at org.hibernate.collection.PersistentList.readFrom(PersistentList.java:358)
 
 at org.hibernate.loader.Loader.readCollectionElement(Loader.java:994)
 
 at org.hibernate.loader.Loader.readCollectionElements(Loader.java:635)
 
 at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
 
 at org.hibernate.loader.Loader.doQuery(Loader.java:689)
 
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
 
 at org.hibernate.loader.Loader.loadCollection(Loader.java:1919)
 
 at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
 
 at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:521)
 
 at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
 
 at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1676)
 
 at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:454)
 
 at org.hibernate.Hibernate.initialize(Hibernate.java:295)
 
 at ve.com.tcs.pm.bf.ProjectManagementBf.getProjectRevision(ProjectManagementBf.java:926)
 
 Name and version of the database you are using:
 
 Oracle10g Release 2
 
 The generated SQL (show_sql=true):
 
 Hibernate: select tasks0_.project_revision_id as project12_2_, tasks0_.id as id2_, tasks0_.order_seq as order14_2_, tasks0_.id as id11_1_, tasks0_.name as name11_1_, tasks0_.start_date as start3_11_1_, tasks0_.end_date as end4_11_1_, tasks0_.duration as duration11_1_, tasks0_.actual_start_date as actual6_11_1_, tasks0_.actual_end_date as actual7_11_1_, tasks0_.actual_duration as actual8_11_1_, tasks0_.actual_cost as actual9_11_1_, tasks0_.planned_value as planned10_11_1_, tasks0_.earned_value as earned11_11_1_, tasks0_.project_revision_id as project12_11_1_, tasks0_.parent_id as parent13_11_1_, taskto1_.id as id11_0_, taskto1_.name as name11_0_, taskto1_.start_date as start3_11_0_, taskto1_.end_date as end4_11_0_, taskto1_.duration as duration11_0_, taskto1_.actual_start_date as actual6_11_0_, taskto1_.actual_end_date as actual7_11_0_, taskto1_.actual_duration as actual8_11_0_, taskto1_.actual_cost as actual9_11_0_, taskto1_.planned_value as planned10_11_0_, taskto1_.earned_value as earned11_11_0_, taskto1_.project_revision_id as project12_11_0_, taskto1_.parent_id as parent13_11_0_ from pm_task tasks0_, pm_task taskto1_ where tasks0_.parent_id=taskto1_.id(+) and tasks0_.project_revision_id=?
 
 
 |