私がやった場合、それは何か違いがありますか?
@Transactional
public void processData() {
List<MyEntity> entities = ....;
MyEntityRepository.save(entities);
}
vs.
@Transactional
public void processData() {
List<MyEntity> entities = ....;
for (MyEntity entity : entities) {
MyEntityRepository.save(entity);
}
}
基になるクエリとパフォーマンスの点で違いは何ですか?
SimpleJpaRepository
から:
_@Transactional
public <S extends T> List<S> More save(Iterable<S> entities) {
List<S> result = new ArrayList<S>();
if (entities == null) {
return result;
}
for (S entity : entities) {
result.add(save(entity));
}
return result;
}
_
したがって、2番目のビジネスメソッドは、リストを反復処理し、ユーザーに代わってsave(Iterable<S> entities)
を呼び出すという意味で、save(S)
Crud Repositoryメソッドのみをシャドウします。
processData
ビジネスメソッドからトランザクションが区切られるである限り、パフォーマンスや実行されるクエリに実際の違いはありません。
Ori Dar が言及したように、実際に違いはありません。
ただし、注意すべき点が1つあります。要素のリストを保存するために使用されるメソッドは、 2.2.0.M1 で<S extends T> List<S> saveAll(Iterable<S> entities)
に名前が変更されました。 repo history 、およびsave
メソッドは引数としてリストを取りません。
上記の回答や質問にコメントする評判が50もないため、この変更に関する新しい回答を作成する必要があります。