在JPA/Play中提交事务之前,实体如何获取ID?

rip*_*234 7 java jpa playframework

看到这个问题.

事实证明,即使没有手动提交事务,在提交TX之前,该人在调用save()方法之后也有一个ID.

数据库不负责协助ID字段吗?如果是这样,在提交之前如何填写ID字段?在提交TX之前是否与DB进行任何通信?

Pio*_*cki 9

是的,允许JPA在事务提交之前与DB通信.它可能会发生,即您明确调用时EntityManager#flush().

此外,只要认为有必要,JPA提供者就可以进行刷新操作.但是,为方便起见,JPA提供程序会将数据库操作延迟到提交事务的时间.

一些自动ID生成器策略必须命中数据库才能获得PK值(据我所知,IDENTITY策略以这种方式工作).
相反,TABLE或者SEQUENCE生成器不需要命中DB来获取ID值.他们使用该allocationSize参数向DB TABLE或SEQUENCE请求一批 ID,这些ID将在不与数据库进一步通信的情况下提供给新实体.