Sobes.tech
Назад к вопросам
Senior
6

Использовал ли ты HQL, Native Query, JDBC напрямую? Батчинг в Hibernate?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Да, использовал все три подхода:

  • HQL (Hibernate Query Language) — объектно-ориентированный язык запросов, который позволяет писать запросы к базе данных на уровне сущностей Java/Kotlin, абстрагируясь от конкретной СУБД.

  • Native Query — SQL-запросы, которые пишутся напрямую и выполняются через Hibernate, когда нужно использовать специфичные для СУБД возможности или оптимизировать производительность.

  • JDBC напрямую — иногда применял для простых операций или в случаях, когда Hibernate не подходит, например, для выполнения специфичных процедур или при интеграции с legacy-кодом.

Батчинг в Hibernate — техника группировки нескольких операций вставки/обновления в один пакет для уменьшения количества запросов к базе и повышения производительности. Настраивается через параметры hibernate.jdbc.batch_size и требует правильной конфигурации сущностей.

Пример настройки батчинга в Hibernate:

hibernate.jdbc.batch_size=50
hibernate.order_inserts=true
hibernate.order_updates=true

И пример кода для батчинга вставок:

session.beginTransaction()
for (i in 1..1000) {
    val entity = MyEntity(data = "value $i")
    session.save(entity)
    if (i % 50 == 0) {
        session.flush()
        session.clear()
    }
}
session.transaction.commit()

Это позволяет отправлять данные партиями по 50 записей, снижая нагрузку на базу и увеличивая скорость.