落葉J空間

          常用鏈接

          統計

          最新評論

          編程經驗(hibernate 1)

          1>


          錯誤顯示: net.sf.hibernate.PropertyValueException: not-null property references a null or transient value: com.Order.customer


          部分原文件:( customer order 類關系:一對多關聯)

          Order.hbm.xml

          ……………

          < many-to-one

          ??????? name = "customer"

          ??????? column = "CUSTOMER_ID"

          ??????? class = "com.Customer"

          ??????? not-null = "true"

          ??????? cascade = "save-update"

          ?????

          ???? />


          執行文件:

          ………

          Session session = sessionFactory.openSession();

          ??? Transaction tx = null;

          ??? try {

          ????? // Create some data and persist it

          ???? tx = session.beginTransaction();

          ?

          ???? Customer customer=new Customer();

          ???? customer.setName("Jack");

          ????

          ???? Order order=new Order();

          ???? order.setOrderNumber("Jack_Order001");

          ???????? session.save(customer);

          ???????? session.save(order);

          ?? tx.commit();


          原因分析:因為在執行代碼中,沒有將 customer order 類一對多關聯起來,若單獨持久化兩個類: session.save(customer);session.save(order); 則在保存 order 的時候,由于 CUSTOMER_ID 是與 customer 類外鍵,因此無法讀取 customer_id, 而在 order.hbm.xml 中指定其不為空,則產生了以上錯誤。

          問題解決: not-null = "true" 改為:not-null="false" 雖然程序無問題,但order CUSTOMER_ID為空,不符合邏輯。應該將指定其一對多的關聯。

          order.setCustomer(customer);

          ????? customer.getOrders().add(order);

          ?

          2


          錯誤顯示: RROR SessionImpl:2400 - Could not synchronize database state with session

          net.sf.hibernate.exception.GenericJDBCException: could not delete collection: [com.Customer.orders#2]


          部分原文件:

          Session session = sessionFactory.openSession();

          ??? Transaction tx = null;

          ??? try {

          ????? tx = session.beginTransaction();

          ????? Customer customer=(Customer)session.load(Customer.class,new Long(3));

          ????? session.delete(customer);

          ????? tx.commit();


          原因分析:因為 cascade 默認值為 none ,所以當刪除 customer 時,不會自動刪除與其關聯的 order 對象。


          問題解決:添加語句 cascade = "delete"

          ?

          posted on 2006-08-09 17:36 黃暉 閱讀(161) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 白河县| 丹凤县| 阿荣旗| 万宁市| 蒙阴县| 安陆市| 西吉县| 新巴尔虎左旗| 平定县| 江安县| 江津市| 三台县| 鹤峰县| 依兰县| 安国市| 北宁市| 柞水县| 武城县| 惠安县| 铜鼓县| 广灵县| 千阳县| 宁化县| 独山县| 西峡县| 光泽县| 曲松县| 盘锦市| 高州市| 双江| 沛县| 西充县| 左贡县| 柯坪县| 固原市| 安康市| 夹江县| 西充县| 龙门县| 宝兴县| 普定县|