java - hibernate one to many with a error, the foreign key was wrong -
i have 2 tables, orders , order_items. relationship between them one-to-many. order_items.fk_orders foreign key. orders.id primary key.
i first save orders , order_items, order_items.fk_orders different orders.id , order_items.fk_orders values long(eg '3213148',but normal value '425618'),the problem occurs sometimes.
orders.hbm.xml below: .... <id name="id" column="id" type="java.lang.long"> <generator class="native"> </generator> </id> <set name="orderproduct" lazy="false" cascade="all" sort="unsorted"> <key column="fk_orders"></key> <one-to-many class="com.arvato.ecommerce.model.base.orderitems"/> </set> .... orderitem.hbm.xml below: .... <id name="id" column="id" type="java.lang.long"> <generator class="native"> </generator> </id> <many-to-one name="orders" class="com.arvato.ecommerce.model.base.orders" cascade="none" outer-join="auto" update="true" insert="true" lazy="false" column="fk_orders"/> .... code below: //save order orders orders = new orders(); .... .... orders.setorderitems(null);//(i think strange don't know why set null value orderitems?) session = getsession(); session.save(object); session.flush() //save order items .... collection orderitems = orders.getorderitems(); if (orderitems != null) { orderitem orderitem; (iterator itemiterator = orderitems.iterator(); itemiterator.hasnext(); orderdao.insertorderproduct(orderitem)) { orderitem = (orderitem) itemiterator.next(); orderitem.setorders(orders); } } .... public int insertorderproduct(orderitem orderitem) throws daoexception { session session =null; try { session = getsession(); session.save(orderitem); session.flush(); return 1; } catch (exception e) { e.printstacktrace(); return 0; } }
your mapping seems correct, that's way using wrong. since use cascade="all"
, orderitems
listed in instance of orders
automatically persisted when save orders
instance !
the below code should enough :
orders orders = new orders(); orders.additem(new orderitem()); ... session = getsession(); session.save(object); session.flush()
where additem method looks :
public void additem(orderitem item) { if (items == null) { items = new arraylist<orderitem>(); } item.setorders(this); items.add(item); }
Comments
Post a Comment