2017-10-06 105 views
0

我想保存對象多次,下面的代碼不能工作:如何多次使用Spring Data保存同一對象?

for(int i = 0; i < 5; i++) { 
    repository.save(object); 
} 

然後我改變了來源:

List<SomeObject> objectList = new ArrayList<>(); 
for(int i = 0; i < 5; i++) { 
    objectList.add(object); 
} 
repository.save(object); 

但是這也不能工作,只保存對象一次到數據庫。

也許是因爲它指向一個實例,但我想知道是否有一種簡單的方法來多次保存對象?

謝謝!

+0

你想要'INSERT' 5新行,或'UPSERT'一個? 如果您每次需要新條目,您可能需要在每個'repository.save'調用之前更改主鍵 –

+0

https://docs.spring.io/spring-data/commons/docs/current/api/org /springframework/data/repository/CrudRepository.html#saveAll-java.lang.Iterable-? – 2017-10-06 09:16:47

+0

如果要在數據庫中有多個條目,則必須創建單獨的對象。 'objectList.add(new Object());'然後'repository.saveAll(objectList);' –

回答

1

由於每次都使用同一個實例,因此它只保存一次對象。

所以你使用object,第一時間所以現在有一個ID,那麼你再次使用的對象,但是我們說,它有一個ID,這樣,而不是將其保存,裏面你DB你的編程更新它。

例如,如果你這樣做:

for(int i = 0; i < 5; i++) { 
    repository.save(new Object()); 
} 

或者,如果你有對象的列表,像

List<SomeObject> objectList = new ArrayList<>(); 
for(int i = 0; i < 5; i++) { 
    objectList.add(object); 
} 

你可以這樣做:

repository.saveAll(objectList); 

現在你發現你的桌子內有5排

+0

避免堅持循環。改爲使用'CrudRepository#saveAll'。 –

+0

感謝您的回答。但是,我用戶'org.springframework.data.repository.CrudRepository'接口,它沒有'saveAll()'方法。但在'save(Iterable entities)'方法中,它的註釋爲_save所有給定的實體._,但它不起作用。 – YOUNG

+0

現在我使用Spring BeanUtil將bean複製5次,併成功插入到數據庫中。這是唯一的方法嗎? – YOUNG

1

我對Spring數據並不熟悉,可能會誤解這個問題,但通常沒有必要多次保存同一個對象。

如果需要數據庫中的多個實例,則需要顯式創建實例的克隆/副本(或左右),並分別保存所有這些實例。

例如,添加在保存對象的循環中創建新實例。

相關問題