本文件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?