#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