当我使用 em.persist()插入实体类的新实例时,生成的 id 会反映在实体类中,但 version 属性仍然显示为null,它不会反映在实体类中。
我正在使用GlassFish 3.1.1。
部分实体类代码
@Id
@GeneratedValue
private Long id;
@Version
private Long version;
public void create(Item item) {
System.out.println("Before Creating " + item.id + ", " + item.version);
entityManager.persist(item);
System.out.println("After Creating " + item.id + ", " + item.version);
}
persist()后的语句显示item.id显示 1 ,但item.version显示 null ,即使我签入数据库 1 。
它应该是这样的,还是一个bug?
答案 0 :(得分:3)
persist()
不会在数据库中插入实体。并且您甚至不能保证在调用persist()
后分配ID。
持久性的做法是将临时实体附加到实体管理器。在刷新时,将分配版本。
因此,如果您在提交事务之前确实需要新版本,请明确调用flush()
然后获取新版本。但通常情况下,它不需要,因为您不需要自己处理版本字段,因此只需提交事务:它将导致刷新完成,因此将分配版本。