落葉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 默認(rèn)值為 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)航:
           
          主站蜘蛛池模板: 江都市| 巴马| 资兴市| 奇台县| 永胜县| 土默特左旗| 分宜县| 广汉市| 宝坻区| 桐城市| 峡江县| 德庆县| 筠连县| 盐源县| 阿拉善盟| 沂水县| 佛山市| 丽江市| 潼南县| 炎陵县| 百色市| 泗洪县| 新巴尔虎右旗| 循化| 江华| 时尚| 西安市| 大英县| 垦利县| 雷波县| 和林格尔县| 晴隆县| 双鸭山市| 府谷县| 宝应县| 徐闻县| 凯里市| 罗平县| 惠水县| 上思县| 全州县|