Hibernate вставка в таблицу два раза с помощью @TableGenerator - PullRequest
3 голосов
/ 05 апреля 2020

Я создаю сущность в 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.

...