落葉J空間

          常用鏈接

          統(tǒng)計

          最新評論

          編程經(jīng)驗(hibernate 1)

          1>


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


          部分原文件:( customer order 類關(guān)系:一對多關(guān)聯(lián))

          Order.hbm.xml

          ……………

          < many-to-one

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

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

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

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

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

          ?????

          ???? />


          執(zhí)行文件:

          ………

          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();


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

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

          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 ,所以當(dāng)刪除 customer 時,不會自動刪除與其關(guān)聯(lián)的 order 對象。


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

          ?

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 莱芜市| 宜城市| 都匀市| 宣城市| 南昌县| 阳山县| 凌云县| 鄂温| 耒阳市| 大城县| 顺平县| 鸡泽县| 永定县| 诸暨市| 万年县| 龙山县| 隆子县| 收藏| 成安县| 康马县| 罗田县| 南陵县| 北川| 荣昌县| 昭平县| 漠河县| 海南省| 呼玛县| 封开县| 克山县| 潼关县| 阜宁县| 阿坝县| 商南县| 临漳县| 民和| 依安县| 辽源市| 新和县| 繁峙县| 祁门县|