Мне нужно делать массовые вставки, и мне нужны идентификаторы того, что добавляется. Это базовый пример, который показывает, что я делаю (что, очевидно, ужасно для производительности). Я ищу гораздо лучший способ сделать это.
public void omgThisIsSlow(final Set<ObjectOne> objOneSet,
final Set<ObjectTwo> objTwoSet) {
for (final ObjectOne objOne : objOneSet) {
persist(objOne);
for (final ObjThree objThree : objOne.getObjThreeSet()) {
objThree.setObjOne(objOne);
persist(objThree);
}
for (final ObjectTwo objTwo : objTwoSet) {
final ObjectTwo objTwoCopy = new ObjTwo();
objTwoCopy.setFoo(objTwo.getFoo());
objTwoCopy.setBar(objTwo.getBar());
persist(objTwoCopy);
final ObjectFour objFour = new ObjectFour();
objFour.setObjOne(objOne);
objFour.setObjTwo(objTwoCopy);
persist(objFour);
}
}
}
В приведенном выше случае persist это метод, который внутренне вызывает
sessionFactory.getCurrentSession().saveOrUpdate();
Есть ли какой-либо оптимизированный способ вернуть идентификаторы и массовую вставку на основе этого?
Спасибо!
Обновление: все заработало со следующими дополнениями и помощью JustinKSU.
import javax.persistence.*;
@Entity
public class ObjectFour{
@ManyToOne(cascade = CascadeType.ALL)
private ObjectOne objOne;
@ManyToOne(cascade = CascadeType.ALL)
private ObjectTwo objTwo;
}
// И аналогично для других классов и их объектов, которые необходимо сохранить