2014-12-04 64 views
1

我有這樣一個模型:Hibernate的問題,多對一映射給予空

@Entity 
[...] 
class ParentObject{ 
    [...] 
    @OneToMany(cascade = CascadeType.ALL, mappedBy= "parentObject", orphanRemoval = true) 
    private List<Relationship> relationship; 
} 

和關係的實體:

@ManyToOne 
@JoinColumn(name="PARENT_OBJECT_ID") 
private ParentObject parentObject; 

,一切工作就更新罰款和保存。只有當我嘗試創建裏面有新的關係的新ParentObject:

parentObject: { 
    id: null, 
    relationship: [ 
     {id:null, 
     parentObjectId:null, 
     [...] 
    }] 
} 

休眠沒有對ParentObject的ID,所以Relationship.parentObject.id爲空。數據庫拋出一個錯誤說:

不能將NULL插入( 「MYDB」 「關係」 「PARENT_OBJECT_ID」。)

任何幫助,將不勝感激。

編輯:這裏是我的服務代碼:

public ParentObjectDto save(ParentObjectDto parentObjectDto) { 
ParentObject parentObject = dtoConverter.convert(parentObjectDto, ParentObject.class);  

boolean isNewPO = parentObject.getId() == null ? true : false; 

parentObject = parentObjectRepository.save(parentObject); 

if (isNewPO) { 
    // This loop ensures that when a new PO is added, the child relationship 
    // objects are connected with the new parentObject that was just added. 
    for (Relationship relationship : parentObject.getRelationship()) { 
     relationship.setParentObject(parentObject); 
    } 
} 

return dtoConverter.convert(parentObject, ParentObjectDto.class); 

}

課程的名稱是不是我寫在這裏的,我只是改變他們更加理解,如果我有任何拼寫錯誤,這是從我的手動更改:)

+0

你可以發佈你的服務代碼,創建並堅持對象嗎? – 2014-12-04 10:13:49

+0

是的,我只是添加了我的服務代碼。 – 2014-12-04 11:02:14

回答

1

看看代碼,問題可能是isNewPO爲true時,您首先保存採購訂單,然後將該父對象設置爲關係。這意味着在持續採購訂單時,關係沒有他們的採購訂單集,導致NULL被插入PARENT_OBJECT_ID列(由於cascade = CascadeType.ALL,此時還存在關係)。

要解決此問題,請在循環後移動parentObject = parentObjectRepository.save(parentObject);,或者連線P0及其在dtoConverter.convert()中的關係。

+0

你真是不敢相信我沒有想到,3小時的調試因此而浪費了!謝謝! – 2014-12-04 11:19:19

+0

:)不客氣。 – 2014-12-04 12:17:01