object references an unsaved transient instance save the transient instance before flushing
object references an unsaved transient instance save the transient instance before flushing
物件引用未儲存的瞬態例項,在重新整理前儲存瞬態例項
錯誤例項:
mortgageInfoDTO MortgagePersonDTO兩者關係 MortgagePersonDTO中包含mortgageInfoDTO 物件
前提:mortgageInfoDTO MortgagePersonDTO 已存在資料庫中 且新建相同的資料物件(臨時物件)
mortgageInfoDTO = mortgageInfoDAO.saveOrUpdate(mortgageInfoDTO);
list = mortgagePersonDAO.createBatch(MortgagePersonDTOList);
解決方法:
錯誤原因:
在呼叫hibernate儲存資料時,需要將資料庫中表對應的持久類物件作為引數傳遞。如果這時的物件中有其他的表字段屬性並且是引用物件型別,那麼這個屬性必須是持久態或者是null的,瞬時態和脫管態都會報錯。我這次報錯就是因為在訂單物件中包含了其他物件,並且這些物件不為null。
如果包含的物件的資料用不到的話,最簡便的解決辦法就是把包含的物件全部置為null。
如果用得到物件中的資料,那麼呼叫持久層的方法重新查詢出對應的物件,此物件此時為持久態,在重新賦值到要儲存的物件中即可。
修改方法:
mortgageInfoDTO = mortgageInfoDAO.saveOrUpdate(mortgageInfoDTO);
MortgageInfoDTO mor = mortgageInfoDAO.findById(mortgageInfoId);
for (MortgagePersonDTO personDTO : MortgagePersonDTOList) {
personDTO.setMortgageInfoDTO(mor);
}
list = mortgagePersonDAO.createBatch(MortgagePersonDTOList);
給personDTO賦予一個持久化的物件去替換那個臨時物件,然後在提交事務。