TGViewer
Java задачи с собеседований Java задачи с собеседований @javaquiz · 5.71K subscribers
Post #1478 2.27K
👨🏻‍💻 Как подключить jpa batch без использования GenerationType.SEQUENCE

Столкнулся с такой ситуацией, что нужно записать большое количество строк в таблицу postgres, где ключем выступает поле типа string.

create table manual_security
(
isin_code varchar(12) not null,
emitent_id numeric,
update_date_time timestamp not null,
constraint manual_security_pk primary key (isin_code)
);

доступа к таблице у меня нет, изменить не могу. т.е. например добавить в нее поле типа int и create sequence manual_security_security_id_auto_gen increment 100;

я прочел в документации, что SEQUENCE is used for delegating the identifier generation to a database sequence.

по документации в случае GenerationType.IDENTITY Spring ИГНОРИРУЕТ батчевую вставку, даже если она включена в настройках.

т.е. чтобы использовать батчевую вставку - нужно, чтобы в классе entity полем был ключ с типом integer и GenerationType.SEQUENCE

вот так

@Id
@SequenceGenerator(name = "manual_security_security_id_auto_gen", allocationSize = 100, sequenceName = "manual_security_security_id_auto_gen", initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "manual_security_security_id_auto_gen")
private Integer securityId;

вопрос к знатокам hibernate - можно ли как-то включить batch и добиться быстрого батчевого сохранения строк в таблице где ключем выступает string.

сейчас класс и репозиторий выглядят так.

@Entity
@Table(name = "manual_security")

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@EqualsAndHashCode(of = "isinCode")
public class ManualSecurity {
@Id
@NotNull
@Column(name = "isin_code", nullable = false)
private String isinCode;
// остальные поля
}

public interface ManualSecurityRepository extends JpaRepository<ManualSecurity, String> {

}

сохарнение saveall коллекции из 4к записей занимает так около 10 минут.

настройки драйвера

jpa:
show-sql: false
open-in-view: false
database: postgresql
properties:
hibernate:
jdbc:
batch_size: 100

Java задачи с собеседований
  • 👍 3
  • 👎 2
More from @javaquiz
  1. Oct 7, 2026Post #2709
  2. Oct 6, 2026🤺 Почему ты получаешь отказ после «норм собеса»? Дело не в знаниях — ты просто не знаешь,…
  3. Oct 5, 2026Post #2705
  4. Sep 14, 2026❓ Вопрос на собеседовании Что такое ForkJoinPool в Java, как он работает, и как его исполь…
  5. Sep 4, 2026⚙️ List.subList() В Java метод subList() позволяет создать представление части списка. Это…
  6. Aug 17, 2026➡️ Quarkus — быстрый и лёгкий фреймворк для Java-приложений Quarkus — оптимизированный фре…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →