I am trying to map a many-to-many relationship using a composite-id in the association table.  Following examples from here and various books, I'm close.  
The association table's columns are filled correctly when linking and saving the objects.  I can also load objects from either end of the relationship.
My trouble is I get an "Unable to deserialize" message when loading the  association table.  I'm requesting suggestions on what I need to fix because it looks right to me.
Misc Info
Running the SQL by hand produces the desired results.
The three classes are Serializable and implement hashCode() and equals() methods.
Objective ---- * ObjectiveMeasure *---- Measure
I am using the Oracle drive from their classes12.jar file which I suppose may be suspect.
Hibernate version:  3.2
Mapping documents:
Code:
<hibernate-mapping>
    <class
        name="model.ObjectiveMeasure"
        table="IPP_OBJ_MSR"
        lazy="false"
    >
        <composite-id name="id" class="model.ObjectiveMeasure$ObjectiveMeasureId">
            <key-property name="measure" type="model.Measure" column="MEASURE_ID" />
         <key-property name="objective" type="model.Objective" column="OBJ_ID" />
      </composite-id>
      
        <many-to-one
            name="measure"
            class="model.Measure"
            cascade="none"
            outer-join="auto"
            update="false"
            insert="false"
            column="MEASURE_ID"
            not-null="false"
        />
        <many-to-one
            name="objective"
            class="model.Objective"
            cascade="none"
            outer-join="auto"
            update="false"
            insert="false"
            column="OBJ_ID"
            not-null="false"
        />
        <property
            name="relationship"
            type="java.lang.String"
            update="true"
            insert="true"
            column="RELATIONSHIP"
            length="10"
            not-null="false"
        />
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class
        name="model.Measure"
        table="IPP_MEASURE"
        lazy="false"
    >
        <id
            name="id"
            column="ID"
            type="long"
            unsaved-value="0"
        >
            <generator class="native">
                <param name="sequence">ipp_ic_measure_seq</param>
            </generator>
        </id>
      <bag
            name="objectives"
            table="IPP_OBJ_MSR"
            lazy="false"
            inverse="true"
            cascade="save-update"
        >
            <key
                column="MEASURE_ID"
            >
            </key>
            <many-to-many
                class="model.Objective"
                column="OBJ_ID"
                outer-join="auto"
             />
      </bag>
</class>
</hibernate-mapping>
<hibernate-mapping>
    <class
        name="model.Objective"
        table="IPP_OBJECTIVE"
        lazy="false"
    >
        <id
            name="id"
            column="ID"
            type="long"
            unsaved-value="0"
        >
            <generator class="native">
                <param name="sequence">ipp_objective_seq</param>
            </generator>
        </id>
        <bag
            name="measures"
            table="IPP_OBJ_MSR"
            lazy="false"
            inverse="false"
            cascade="save-update"
        >
            <key
                column="OBJ_ID"
            >
            </key>
            <many-to-many
                class="model.Measure"
                column="MEASURE_ID"
                outer-join="auto"
             />
      </bag>
    </class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():session.createQuery( "from ObjectiveMeasure" ).list();
Full stack trace of any exception that occurs:Code:
The debug output:
15:05:40,834 DEBUG SQL:393 - 
    select
        objectivei0_.MEASURE_ID as IC1_16_,
        objectivei0_.OBJ_ID as OBJ2_16_,
        objectivei0_.RELATIONSHIP as RELATION3_16_ 
    from
        ipp.IPP_OBJ_MSR objectivei0_
Hibernate: 
    select
        objectivei0_.MEASURE_ID as IC1_16_,
        objectivei0_.OBJ_ID as OBJ2_16_,
        objectivei0_.RELATIONSHIP as RELATION3_16_ 
    from
        ipp.IPP_OBJ_MSR objectivei0_
15:05:40,834 DEBUG AbstractBatcher:476 - preparing statement
15:05:41,084 DEBUG AbstractBatcher:374 - about to open ResultSet (open ResultSets: 0, globally: 0)
15:05:41,084 DEBUG Loader:682 - processing result set
15:05:41,084 DEBUG Loader:687 - result set row: 0
15:05:41,100 DEBUG SerializationHelper:204 - Starting deserialization of object
15:05:41,100  INFO SerializableType:128 - could not read column value from result set: IC1_16_; could not deserialize
15:05:41,100 DEBUG AbstractBatcher:381 - about to close ResultSet (open ResultSets: 1, globally: 1)
15:05:41,100 DEBUG AbstractBatcher:366 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
15:05:41,100 DEBUG AbstractBatcher:525 - closing statement
15:05:41,100 DEBUG JDBCContext:233 - after autocommit
15:05:41,100 DEBUG ConnectionManager:398 - aggressively releasing JDBC connection
15:05:41,100 DEBUG ConnectionManager:435 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
15:05:41,100 DEBUG DriverManagerConnectionProvider:129 - returning connection to pool, pool size: 1
org.hibernate.type.SerializationException: could not deserialize
   at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:217)
   at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:240)
   at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:78)
   at org.hibernate.type.SerializableType.get(SerializableType.java:39)
   at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
   at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
   at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
   at org.hibernate.type.ComponentType.hydrate(ComponentType.java:560)
   at org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
   at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1088)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:553)
   at org.hibernate.loader.Loader.doQuery(Loader.java:689)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
   at org.hibernate.loader.Loader.doList(Loader.java:2144)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)
   at org.hibernate.loader.Loader.list(Loader.java:2023)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:393)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
   at model.ObjectiveMeasureTestDB.findObjectiveMeasure(ObjectiveMeasureTestDB.java:106)
   at model.ObjectiveMeasureTestDB.testHashCode(ObjectiveMeasureTestDB.java:80)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at junit.framework.TestCase.runTest(TestCase.java:154)
   at junit.framework.TestCase.runBare(TestCase.java:127)
   at junit.framework.TestResult$1.protect(TestResult.java:106)
   at junit.framework.TestResult.runProtected(TestResult.java:124)
   at junit.framework.TestResult.run(TestResult.java:109)
   at junit.framework.TestCase.run(TestCase.java:118)
   at junit.framework.TestSuite.runTest(TestSuite.java:208)
   at junit.framework.TestSuite.run(TestSuite.java:203)
   at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
   at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.io.StreamCorruptedException: invalid stream header
   at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:763)
   at java.io.ObjectInputStream.<init>(ObjectInputStream.java:278)
   at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:252)
   at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:209)
   ... 40 more
Name and version of the database you are using: Oracle 10.1g
The generated SQL (show_sql=true):15:05:40,834 DEBUG SQL:393 - 
    select
        objectivei0_.MEASURE_ID as IC1_16_,
        objectivei0_.OBJ_ID as OBJ2_16_,
        objectivei0_.RELATIONSHIP as RELATION3_16_ 
    from
        ipp.IPP_OBJ_MSR objectivei0_
Hibernate: 
    select
        objectivei0_.MEASURE_ID as IC1_16_,
        objectivei0_.OBJ_ID as OBJ2_16_,
        objectivei0_.RELATIONSHIP as RELATION3_16_ 
    from
        ipp.IPP_OBJ_MSR objectivei0_
Debug level Hibernate log excerpt: debug
POJO Code Snippetsequals() and hashCode() are implemented on all classes.
Code:
public class Measure implements java.io.Serializable
{
   private List<Objective> objectives;
   
   public long getId() ...
   public List<Objective> getObjectives() ...
}
public class Objective implements java.io.Serializable
{
   private Measure measure;
   
   public long getId() ...
   public List<IcMeasure> getIcMeasures() ...
}
public class ObjectiveMeasure implements java.io.Serializable
{
   private Measure measure;
   private Objective objective;
   
   public Measure getMeasure() ...
   public Objective getObjective() ...
   public String getRelationship() ...
   public static class ObjectiveMeasureId implements java.io.Serializable
   {
      private Measure icm;
      private Objective obj;
      
      public Measure getMeasure() ...
      public Objective getObjective() ...
   }
}
[/code]