插入新实例后,版本属性未反映出来

时间:2012-01-07 10:19:32

标签: jpa-2.0 java-ee-6 glassfish-3

当我使用 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?

1 个答案:

答案 0 :(得分:3)

persist()不会在数据库中插入实体。并且您甚至不能保证在调用persist()后分配ID。

持久性的做法是将临时实体附加到实体管理器。在刷新时,将分配版本。

因此,如果您在提交事务之前确实需要新版本,请明确调用flush()然后获取新版本。但通常情况下,它不需要,因为您不需要自己处理版本字段,因此只需提交事务:它将导致刷新完成,因此将分配版本。