落葉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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 共和县| 土默特右旗| 如皋市| 琼中| 临潭县| 平乐县| 东山县| 平南县| 荣昌县| 山西省| 阿拉善盟| 揭阳市| 衡阳市| 中江县| 剑阁县| 南乐县| 周宁县| 阳原县| 同仁县| 新泰市| 诏安县| 原平市| 弥勒县| 威海市| 德清县| 鹿泉市| 康定县| 松原市| 隆昌县| 兴和县| 驻马店市| 阜平县| 星子县| 雅安市| 东乌珠穆沁旗| 富裕县| 石城县| 荆州市| 麻城市| 顺昌县| 池州市|