2008-05-18

我的 hibernate 级联插入

关键字: hibernate
我做一个网上书城的项目,用户下订单要用两张表完成,ws_order,ws_orderItem
ws_orderItem通过外键关联第一张表的主键。
    表的映射文件关键部分如下:
WsOrder.hbm.xml:

   <set name="wsOrderItems" inverse="false" cascade="all">
            <key>
                <column name="orderId" not-null="true" />
            </key>
            <one-to-many class="com.yourcompany.table.WsOrderItem" />
        </set>

WsOrderItem.hbm.xml

     <many-to-one name="wsOrder"   class="com.yourcompany.table.WsOrder" fetch="select" cascade="all">
            <column name="orderId"/>    //注意:这列要可以为空
        </many-to-one>

使用的方法如下:

public WsOrder createOrder(CarBean carBean,WsUser wsUser,String payment){
WsOrder order=new WsOrder();

Set<WsOrderItem> orderItems=new HashSet();
for(int i=0;i<carBean.getBookList().size();i++){
WsBook wsBook=bookDaoInter.findById(carBean.getBookList().get(i).getBookId());
orderItems.add(createOrderItem(
(short)carBean.bookList.get(i).getNumber(),
wsBook
));
}

order.setAddress(wsUser.getAddress());
order.setCreatedDate(new Date());
order.setDeliver(carBean.getDeliver());
order.setMobilePhone(wsUser.getMobilePhone());
order.setName(wsUser.getName());
order.setPayment(payment);
order.setState("未发货");
order.setTelephone(wsUser.getTelephone());
order.setWsOrderItems(orderItems);
order.setWsUser(wsUser);
order.setZip(wsUser.getZip());

return order;
}

然后用DAO保存order即可
orderItem的外键并没有设置(所以这列要可以为空,不然会有异常),保存后会自动关联到order上
评论
发表评论

您还没有登录,请登录后发表评论