我现在建立客户和订单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语句做测试就会出错!
请问大家一下,是不是必须关联的字段设置成一样才行???谢谢!
其中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语句做测试就会出错!
请问大家一下,是不是必须关联的字段设置成一样才行???谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货