Я должен сделать массовые вставки, и мне нужны идентификаторы того, что добавляется. Это базовый пример, который показывает, что я делаю (что явно ужасно для производительности). Я ищу гораздо лучший способ сделать это.
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);
}
}
}
В вышеприведенном случае сохраняется метод, который внутренне вызывает
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;
}
// И аналогично для других классов и их объектов, которые необходимо сохранить