2016-02-05 18 views
0

當Spring爲對象的數組,編寫代碼,我有這樣的代碼:這個add()函數是如何工作的,爲什麼我返回null?

TaskList parent_list = repo.findOne(listId); 

Task t = new Task(); 
// set fields for t 

parent_list.getTasks().add(t); 
repo.save(parent_list); 

這裏,repoTaskList個倉庫,並在春季數據JPA的的JpaRepository擴展。 parent_list包含有關自身(名稱,所有者)的一些數據和List<Task>

我的問題是,在致電save()之前,add()函數是如何工作的?爲什麼我不需要返回一個值(即需要做parentList.setTasks(parent_list.getTasks().add(t));)?

作爲repo.save()的結果,我得到一個空對象。

我只有TaskList對象的存儲庫,而不是Task。我的印象是,不需要額外的回購;您只需要與第一個表格中的表格建立關係,並自動保存條目。

+0

我正在考慮這些方面:如果你需要給變量'c'加1,那麼'c = c + 1',不只是'c + 1'。那麼我是否也需要在這裏還原某些東西? – cst1992

+0

這是基本的java。你有一個集合。你打電話添加。該對象被添加到集合中。爲什麼你需要返回一些東西?! –

+0

@BillyFrost我只是有點困惑。我想我們需要像'parentList.setTasks(parent_list.getTasks()。add(t));' – cst1992

回答

1

我假設TaskListTask之間有一對多的關係。 TaskList使用返回List<Task>getTasks()方法返回其任務。通過方法add(),您可以將新元素添加到列表中。神奇的是 - List由hibernate提供,當新項目被添加或從列表中刪除時,它有特殊的處理。一旦你堅持這些操作,它將運行SQL查詢/更新/刪除以將更改傳播到數據庫中。

+0

我已經添加到問題;你在最後一句話中所說的話沒有發生。 – cst1992

+0

對於將來的讀者,將'cascade'屬性添加到父TaskList'表中解決了這個問題。 – cst1992

0

看來,add()是一個功能的事實使所有的差異。

add()函數將在其中的某個地方進行賦值,將Task附加到List<Task>