我现在建立客户和订单2个表customer,myorder.
其中customer表有2个字段cid,cname,其中cid为主键.
myorder表有3个字段oid,orderName,cidorder,其中oid为主键
其中一对多的关系是通过两个表的cid和cidorder进行关联.现在我的配置如下,都没有加inverse属性。
<class name="com.xll.Customer" table="CUSTOMER" schema="SCOTT">
<id name="cid" type="java.lang.String">
<column name="cid" />
<generator class="native" />
</id>
<property name="cname" type="java.lang.String">
<column name="cname" length="10" />
</property>
<set name="orders" table="MYORDER" cascade="all" >
<key column="cid"></key>
<one-to-many class="com.xll.Order" />
</set>
</class>    <class name="com.xll.Order" table="MYORDER" schema="SCOTT">
        <id name="oid" type="java.lang.String">
            <column name="oid" />
            <generator class="native" />
        </id>
        <property name="ordername" type="java.lang.String">
            <column name="ordername"/>
        </property>
        <many-to-one
         name="customer"
         class="com.xll.Customer" 
         column="cidorder"
         >
         </many-to-one>
    </class>
测试方法代码如下:
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
session = factory.openSession();

Customer customer=new Customer();
customer.setCname("aa");

Order order1=new Order();
Order order2=new Order();
Order order3=new Order();

order1.setOrdername("bb");
order2.setOrdername("cc");
order3.setOrdername("dd");

order1.setCustomer(customer);
order2.setCustomer(customer);
order3.setCustomer(customer);         tran = session.beginTransaction();
customer.getOrders().add(order1);
customer.getOrders().add(order2);
customer.getOrders().add(order3);
        session.save(customer);

tran.commit();
这样程序就会有如下的错误:Hibernate: insert into SCOTT.CUSTOMER (cname, cid) values (?, ?)
Hibernate: insert into SCOTT.MYORDER (ordername, cidorder, oid) values (?, ?, ?)
Hibernate: insert into SCOTT.MYORDER (ordername, cidorder, oid) values (?, ?, ?)
Hibernate: insert into SCOTT.MYORDER (ordername, cidorder, oid) values (?, ?, ?)
Hibernate: update SCOTT.MYORDER set cid=? where oid=?
Hibernate: update SCOTT.MYORDER set cid=? where oid=?
Hibernate: update SCOTT.MYORDER set cid=? where oid=?其中update语句就会出错,报错为列名无效,因为myorder表中没有cid字段,cid是customer表的,而这连个表关联是分别通过customer表的cid字段和myorder表的cidorder字段进行的一对多的关联!这样的话程序就会报错!
如果把myorder表的cidorder字段改为cid好像程序没有报错!我把inverse="true"属性加在customer配置文件中不会出错,因为它没有update语句,但现在我去掉了update语句做测试就会出错!
请问大家一下,是不是必须关联的字段设置成一样才行???谢谢!