Спящий режим JPA, генерирующий тонны запросов sequence.nextval для объекта OneToMany

#hibernate #spring-boot #jpa

#спящий режим #spring-boot #jpa

Вопрос:

У меня есть родительская таблица и дочерняя таблица. Родительский файл может содержать много дочерних записей. Всякий раз, когда я выполняю родительское сохранение, оно генерирует множество select инструкций для генерации последовательности каждой дочерней записи.
select ITEM_SEQ,nextval from dual

Есть ли какой-либо способ избежать этого. Я ищу прямое утверждение, которое не приведет к этой nextval генерации, улучшая производительность.

 @Entity
@Table(name="Bucket")
public class Bucket {
Long id;

@OneToMany(mappedBy = "bucket", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private Set<Item> items = new TreeSet<>();
.....
....
}



@Entity
@Table(name = "Item")
public class Item {



    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ItemGenerator")
    @SequenceGenerator(name = "ItemGenerator", sequenceName = "ITEM_SEQ", allocationSize = 1)
    @Column(name = "ITEM_SEQ")
    private Long id;
...
...
}
  

Ответ №1:

GenerationType.SEQUENCE требуется дополнительный вызов для получения нового идентификатора из последовательности БД. Это не проблема с производительностью в большинстве приложений. Если вы не хотите, чтобы это произошло, используйте GenerationType.IDENTITY вместо этого.

Комментарии:

1. Проблема с Identity заключается в том, что он не поддерживает пакетные вставки. Я думаю увеличить размер выделения до 50 как для объекта, так и в последовательности DB