PostgreSQL上的GenerationType.IDENTITY开销

时间:2016-03-09 18:49:56

标签: hibernate postgresql jpa

本文件states

  

虽然身份排序似乎是分配id的最简单方法,但它们有几个问题。一个是因为在插入行之前数据库没有分配id,所以直到提交之后或刷新调用之后才能在对象中获得id。身份排序也不允许序列预分配,因此可能需要为每个插入的对象选择,这可能会导致严重的性能问题,因此通常不建议这样做。

Hibernate不鼓励GenerationType.IDENTITY as well

Simple repository.save(通过Spring Data JPA)给我这个SQL:

Hibernate: select nextval ('credits_id_sequence')
Hibernate: insert into fullname_credits (id) values (?)
Hibernate: insert into author (first_name, last_name, patronymic_name) values (?, ?, ?)
Hibernate: insert into string_credits (credits, id) values (?, ?)
Hibernate: insert into document (basic_credits_id, main_title, edition_credits_id, edition_description, imprint_place, publication_date, publisherName) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into journal_article (endpage, designated_number, issn, series_main_title, startpage, id) values (?, ?, ?, ?, ?, ?)

Hibernate:更新作者设置fullname_credits_id =?其中id =?

使用Spring的HibernateJpaVendorAdapter.showSql启用SQL日志记录。除了显示credits_id_sequence之外,使用GenerationType.IDENTITY。

所以,似乎没有select + insert用于id检索,因此:Hibernate如何确定实体id?

0 个答案:

没有答案