Hi,
I've asked this question in stackoverflow (
http://stackoverflow.com/
questions/1420498/how-to-cascade-save-with-compositeid-in-nhibernate),
but didn't get the right answer.
In short the question is. Is it possible to cascade Save operation for
referenced entities which are referenced by composite-id?
THE DB:
  A(id, Name)
  B(id, Name)
  AB(AId, BId) references A and B
CLASSes:
public class A
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<AB> LinkToB { get; private set; }
}
public class B
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}
public class AB
{
    public virtual A A { get; set; }
    public virtual B B { get; set; }
    public override bool Equals(object obj) { /* routine */ }
    public override int GetHashCode() { /* routine */ }
}
THE TEST:
var a = new A { Name = "a1" };
var b = new B { Name = "b1" };
a.LinkToB.Add(new AB { A = a, B = b });
//session.SaveOrUpdate(b); < I don't like this call :)
session.SaveOrUpdate(a); // I want to persist all three objects using
one call. Is it possible?
MAPPINGS:
A hbm:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="property" auto-import="true" default-cascade="none" default-
lazy="true">
  <class xmlns="urn:nhibernate-mapping-2.2" name="NHibernateTest.A,
NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
table="`A`">
    <id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Id" />
      <generator class="identity" />
    </id>
    <property name="Name" type="System.String, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Name" />
    </property>
    <bag cascade="all" inverse="true" name="LinkToB">
      <key>
        <column name="AId" />
      </key>
      <one-to-many class="NHibernateTest.AB, NHibernateTest,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </bag>
  </class>
</hibernate-mapping>
B hbm:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="property" auto-import="true" default-cascade="none" default-
lazy="true">
  <class xmlns="urn:nhibernate-mapping-2.2" name="NHibernateTest.B,
NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
table="`B`">
    <id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Id" />
      <generator class="identity" />
    </id>
    <property name="Name" type="System.String, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Name" />
    </property>
  </class>
</hibernate-mapping>
AB hbm:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
access="property" auto-import="true" default-cascade="none" default-
lazy="true">
  <class xmlns="urn:nhibernate-mapping-2.2" name="NHibernateTest.AB,
NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
table="`AB`">
    <composite-id mapped="false" unsaved-value="undefined">
      <key-many-to-one name="A" class="NHibernateTest.A,
NHibernateTest, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null">
        <column name="AId" />
      </key-many-to-one>
      <key-many-to-one name="B" class="NHibernateTest.B,
NHibernateTest, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null">
        <column name="BId" />
      </key-many-to-one>
    </composite-id>
  </class>
</hibernate-mapping>
Thank you!