想在主从表中实现一个简单的一对多功能.但在保存时候出错.老是说"could not synchronize database state with session"  ,请高手解答.不胜感激
主表: orderinfo mapping 文件
xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns ="urn:nhibernate-mapping-2.0">
  <class name="Nhibernate.OneToMany.Order,Nhibernate.OneToMany" table="orderinfo" >
    <id name="Id" column="id" type ="Int32" unsaved-value="0">
      <generator class ="assigned" />
    </id>
    <property name ="OrderNo" column ="OrderNo" type ="String(10)" />
    <property name ="Name" column ="Name" type ="String(50)" />
    <property name ="Date" column ="Date" type ="DateTime" />
    <set name="Products" table="item" cascade="all" inverse="true" lazy="false">
       <key column = "OrderNo" />
       <one-to-many class="Nhibernate.OneToMany.Products,Nhibernate.OneToMany" />
    </set>
  </class>
</hibernate-mapping>字表 item mapping 文件:
<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns ="urn:nhibernate-mapping-2.0">
  <class name="Nhibernate.OneToMany.Products,Nhibernate.OneToMany" table="item" >
    <id name="Id" column="id" type ="Int32">
      <generator class ="assigned" />
    </id>
    <property name="PId" column="pid" type ="String(10)" />
    <property name="OrderNo" column="OrderNo" type ="String(10)" />
    <property name="Name" column="name" type ="String(50)" />
    <many-to-one name="Order" class="Nhibernate.OneToMany.Order,Nhibernate.OneToMany" column="OrderNo" />
  </class>
</hibernate-mapping> 主程序代码: factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
ITransaction transcation = session.BeginTransaction();
Order Order = new Order();
Order.OrderNo ="0001";
Order.Name="order0001";
Order.Date = DateTime.Now;
Order.Id=1;
Products p = new Products();
p.Name="book";
p.PId ="1234567";
p.Order =Order;
Order.Products.Add(p,p);
session.SaveOrUpdate(Order);
transcation.Commit();
session.Close();
MessageBox.Show("Added OK!");

解决方案 »

  1.   

    主要是"inverse = true" 这个问题.被网上某篇文章误导了,真怀疑他到底有没有真正测试通过.
    如果想要完整的测试代码,请留下email
    再问大家一次: 如何结帖子啊,当时打出100分请教,结果后来自己搞定.所以想自己把帖子结了.
      

  2.   

    <id name="Id" column="id" type ="Int32">
          <generator class ="assigned" />
        </id>
    在多的一方中是不能使用assigned标识符的(我用的是0.2版),
    因为SaveOrUpdate(obj)无法确定对象是新增的还是修改过。
      

  3.   

    microxuzh (石头) 兄:
    呵呵,给我发一份代码吧
    谢谢了
    [email protected]
      

  4.   

    microxuzh (石头) 兄:
    呵呵,给我发一份代码吧
    谢谢了
    [email protected]
      

  5.   

    ,谢谢,我也要一份。[email protected]