Я создаю сущность в Hibernate и использую @TableGenerator для генерации значений первичного ключа. Мой класс сущностей приведен ниже:
@Entity
@Table(name="studenttable")
public class Student {
@TableGenerator(
name="stdGen",
table="ID_GEN",
pkColumnValue="studentId",
pkColumnName="GEN_KEY",
valueColumnName="GEN_VALUE", allocationSize = 10)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "stdGen")
private int studentId;
//rest of the code
}
Мой вопрос: когда я выполняю код, изначально два раза происходит вставка таблицы ID_GEN. Консоль показывает вот так
Hibernate: select tbl.GEN_VALUE from ID_GEN tbl where tbl.GEN_KEY=? for update
Hibernate: insert into ID_GEN (GEN_KEY, GEN_VALUE) values (?,?)
Hibernate: update ID_GEN set GEN_VALUE=? where GEN_VALUE=? and GEN_KEY=?
Hibernate: select tbl.GEN_VALUE from ID_GEN tbl where tbl.GEN_KEY=? for update
Hibernate: update ID_GEN set GEN_VALUE=? where GEN_VALUE=? and GEN_KEY=?
Пожалуйста, объясните, почему так происходит. После этого все работает нормально. Я пишу код ниже, чтобы вставить два объекта в таблицу.
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.insert(new Student("ABC"));
session.insert(new Student("DEF"));
session.getTransaction().commit();
Использование версии Hibernate 5.2.3.