j2ee 70個問題中有詳細的解釋這個問題!  請參考!

解决方案 »

  1.   

    http://book.csdn.net/bookfiles/563/10056318682.shtml
      

  2.   

    <set>元素的inerse属性的设置是相对于双向关系来说的,关系到hibernate以那个对象做为状态的变化来改变和同步数据库。
    以下是具体的例子说明p155 :Customer:
    ID      NAME
    1        jackyorder:
     ID   ORDER_NUMBER     CUSTOMER_ID(FK)
      1    jacky_order001           null
       以下操作会使 SQL 出现两次重复抄作:
       Tx =session.beginTransaction();
       Customer customer = (Customer) session.load(Customer.class,new Long(1));
       Order order = (Order) session.load(Order.class,new Long(1));
       //建立两个对象之间的关系
    order.setCustomer(customer);
    customer.getOrders().add(order);
    tx.commit();
    会执行两句SQL
    Update orders set ORDER_NUMBER =’ jacky_order001’, CUSTOMER_ID=1 where ID =1;
    Update  orders  set  CUSTOMER_ID=1  where ID =1;
    因为在建立关系的时候hibernate 探测到两个持久化类的状态都发生了变化,所以做出相应的持久化动作。
    这个不利java的性能。
    解决的办法是将:one 方(customer)的<set>元素加入 inerse=”true”属性,那么hibernate只会当many(order)方的状态发生变化时才做出反应。
      

  3.   

    inverse="false"
    在关联的时候靠父方来维持关联关系。
    inverse="true"
    在关联关系中靠子方来维持关联关系。