Order表的结构如下
序号
|
字段名
|
注释
|
类型
|
长度
|
缺省值
|
PK
|
FK
|
NULL
|
备注
|
1
|
order_id
|
订单ID
|
|
|
|
Y
|
|
|
|
|
customer_id
|
用户ID
|
|
|
|
|
Y
|
|
|
2
|
date_added
|
订单生成日期
|
|
|
|
|
|
|
|
3
|
date_modified
|
订单最后修改日期
|
|
|
|
|
|
|
|
4
|
status
|
订单状态
|
|
|
|
|
|
|
|
下面是向Order表插入数据的代码
MOrder order=
new
MOrder();
order.setDateAdded( new Date());
order.setDateModified( new Date());
order.setMCustomer(user);
order.setStatus(1);
for (Iterator it= cart.getItems().values().iterator();it.hasNext();)
{
MOrderProduct orderitem=(MOrderProduct)it.next();
orderitem.setMOrder(order);
order.getMOrderProducts().add(orderitem);
}
morderService
.saveOrder(order);
执行过程中出现了如下错误提示
object references an unsaved transient instance - save the transient instance before flushing:...
在网上查阅资料,参考如下链接
打开MOrder.hbm.xml
定位到如下位置
<
many-to-one
name
=
"MCustomer"
class
=
"org.easybooks.bookstore.vo.MCustomer"
fetch
=
"select"
>
<
column
name
=
"customer_id"
/>
</
many-to-one
>
修改为
<
many-to-one
name
=
"MCustomer"
class
=
"org.easybooks.bookstore.vo.MCustomer"
fetch
=
"select"
cascade
=
"save-update"
>
<
column
name
=
"customer_id"
/>
</
many-to-one
>
这样错误得到解决
这里many-to-one的意思是一个Customer可以对应多个订单
这里Order和Customer是多对一的关系
提示错误的原因是保存Order的时候,Customer是瞬时态,所以不能够保存
解决的方法是在hibernate映射文件MOrder.hbm.xml中配置级联保存策略,使得Customer是临时对象时也可以保存