提问人:Haseeb Wali 提问时间:1/1/2020 最后编辑:BalusCHaseeb Wali 更新时间:1/2/2020 访问量:717
JPA 生成策略 TABLE 和 SEQUENCE 之间的区别
Difference between JPA generation Strategy TABLE and SEQUENCE
问:
我正在将Spring boot与MySql和Hibernate一起使用。我有一个简单的应用程序,我有用户表。
@Entity(name = "user")
Public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id")
private int Id;
// Getters Setters and remaining attributes
然后我使用 Spring Transaction 在用户表中插入 20 条记录
for(int i = 0; i < 20; i++)
userService.save(new User("fName"+i, "lName"+i);
我可以看到所有 20 个插入查询的以下输出
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into user (fname, lname, id) values (?, ?, ?)
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into user (fname, lname, id) values (?, ?, ?)
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into user (fname, lname, id) values (?, ?, ?)
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into user (fname, lname, id) values (?, ?, ?)
根据我对 GenerationType.SEQUENCE 的理解,它应该只从数据库查询一次,之后休眠不应该从 DATABASE 查询下一个序列并继续生成序列,直到它达到下一个 allocationSize(默认为 50)。为什么它总是在数据库中查询所有 ID。 在我看来,这种行为应该反映在GenertaionType.TABLE中(如果我改变它,就会发生这种情况)
答: 暂无答案
评论
SEQUENCE