свойство версии не отображается после вставки нового экземпляра - PullRequest
1 голос
/ 07 января 2012

Когда я использую em.persist () для вставки нового экземпляра класса сущности, сгенерированный id отражается в классе сущности, но версия * Свойство 1006 * по-прежнему показывает ноль, оно не отражается в классе сущности.

Я использую 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 .

Это должно быть так или ошибка?

1 Ответ

3 голосов
/ 07 января 2012

persist() не вставляет объект в базу данных.И вам даже не гарантируется, что вам будет присвоен идентификатор после вызова persist().

Что нужно сделать, это сделать временную сущность присоединенной к менеджеру сущностей.Во время сброса версия будет назначена.

Итак, если вам действительно нужна новая версия до совершения транзакции, вызовите flush() явно, а затем получите новую версию.Но обычно это не нужно, потому что вам не нужно иметь дело с полем версии самостоятельно, поэтому просто зафиксируйте транзакцию: это приведет к сбросу, и версия будет назначена.

...