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

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -