2012-01-05 51 views
0

當我持續提問問題時,與該問題相關的答案對象不會將外鍵設置爲問題的主鍵。但是,問題實例和屬於它的所有答案都已成功保存到數據庫中。在我的實體中沒有設置外鍵

如果您需要更多代碼,我會添加它。

問題實體

@OneToMany(mappedBy = "question", fetch = FetchType.EAGER, cascade = { CascadeType.ALL }) 
@OrderBy("serialNumber ASC") 
private List<Answer> answers; 

答實體

@ManyToOne(fetch = FetchType.LAZY) 
private Question question; 

還是我手動有問題的實例通過set方法分配給每個答案?

更新 Okey,我試着在每個答案對象的setter上設置問題實例,它的工作原理。但是,如果你使用上面的級聯規則,是否有人會說這是正確的。您仍然需要手動將它們連接在一起。

回答

2

是的,它是正確的。 Hibernate使用關聯的擁有方來堅持關聯。擁有的一面是沒有「mappedBy」屬性的一面。

級聯將使所有答案在持續問題時保持不變,並且在合併問題時合併答案,對所有其他操作類似。但該協會必須由您處理。

1

我認爲你必須這樣做。 cascadeType.ALL只意味着如果您對Question做任何事情(例如堅持),您的所有Answer也將被持續。

1

嗯..是的,我確實認爲你必須手動設置雙向關聯中的對象的關聯。即加入一個答案,你應該做

Answer a = new Answer(); 
question.addAnswer(a); 
answer.setQuestion(question); 

也就是說至少如果你想releationship是雙向的,即能夠從答案去質疑和周圍的其他方式。

相關問題