2016-06-24 205 views
0

設置缺失的參數爲空當我嘗試將我的對象之一,休眠檢測缺少我的目標對象的屬性,並設置相對於空 我的數據庫組成:休眠:插入數據在數據庫

Hall  Usine  Users_Usines User 
    hallID usineID  userID   userID 
    usineID    usineID 

爲了創建一個大廳,我使用:

hall = mapper.readValue(hallData, Hall.class); 
long res = hallDAO.create(hall); 

而且這是在DAO執行的代碼是:

Session session = HibernateUtil.getCurrentSession(); 
Transaction transaction = session.beginTransaction(); 
int id = (int) session.save(object); 
transaction.commit(); 
session.clear(); 
session.close(); 
HibernateUtil.closeCurrentSession(); 

我的問題是我的大廳有一個「Usine」,但我的「Usine」的「用戶」屬性丟失,所以休眠設置我的Users_Usines表爲空。

我修改了我自己寫的語句而不是使用session.update(object)的類似問題,但是我看到INSERT語句不支持INSERT VALUES格式。

如何解決?謝謝!

回答

1

這個問題似乎不是休眠相關的,而是你如何從mapper填充你的Hall對象的產品,我認爲它可能是某種類型的JSON庫。

您是否確認hallData包含在hibernate插入數據時在數據庫級別形成該關係所需的所有相關信息?這似乎不是從迄今爲止所顯示的。

每當您收到此hallData時,如果您打算在數據庫中創建一個全新的Hall實例,它必須是絕對完整的。 Hibernate只知道你提供的信息,所以沒有它,這種關係就不能建立。

如果hallData是局部的,你的目的是UPDATE現有記錄,那麼你就需要先裝入從數據庫中Hall,合併您從映射器讀取到該實例的變化,然後調用save。這將有效維護現有狀態並僅更改hallData中提供的字段。

+0

實際上,霍爾實體的hallData是完整的。這是他的屬性「Usine」,其中只包含「usineID」而不包含「用戶」屬性,所以休眠更新數據庫表「users_usines」並刪除其中的所有記錄。 – xNeyte

+0

直接屬性可能被填充;然而,通過_complete_,我的意思是對象圖被填充,以便當Hibernate級聯發生變化時,它們被正確應用;因此一個_complete對象graph_。 – Naros