JPA не вставляет данные в строку после сохранения - PullRequest
0 голосов
/ 03 августа 2011

Я использую значение, сгенерированное ID в моей сущности

@Id
@TableGenerator(
    name="marcaTable",
    table="JPA_WXS_APP_SEQUENCE_GENERATOR",
    pkColumnName="GEN_KEY",
    valueColumnName="GEN_VALUE",
    pkColumnValue="MARCA_ID",
    allocationSize=1,
    initialValue=0)
@GeneratedValue(strategy=GenerationType.TABLE,generator="marcaTable")
public int getId() {
    return Id;
}

Я использую таблицу для сохранения идентификатора.

Если я выполню этот код дважды, его ошибка завершится из-за дублирования идентификатора (1 идентификатор)

    public static void main(String[] args) {
    EntityManagerFactory emf =
        Persistence.createEntityManagerFactory("ACoches");
    EntityManager em = emf.createEntityManager();
    EntityTransaction tx = em.getTransaction();

    tx.begin();

    marca nmarca2 = new marca();
    nmarca2.setNombre_marca("pepito");
        em.flush();
        em.persist(nmarca2);
        tx.commit();
        em.close();
        emf.close();
}

}

Но если я вручную выполню выбор таблицы marca, она будет пустой, кажется, что JPA не вставляет данные в строку только тогда, когда я делаю em.persist (nmarca2);

Если я удаляю таблицу JPA_WXS_APP_SEQUENCE_GENERATOR вручную и снова выбираю таблицу marca, то да, я вижу регистр.

Заранее спасибо !!!

1 Ответ

0 голосов
/ 03 августа 2011

persist () просто регистрирует объект для сохранения.Он не будет вставлен до коммита () или флеша ().Если вы вызовете flush () после функции persist (), она будет вставлена.

Не можете понять, почему вы получили бы дублированный идентификатор.Лучше включите ведение журнала, чтобы увидеть, какой SQL выполняется.

Одной из проблем может быть ваше initialValue = 0, попробуйте удалить или изменить его на 1.

...