JPA在持久化后不会在行中插入数据

时间:2011-08-03 11:20:15

标签: jpa eclipselink

我在我的实体中使用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;
}

我使用表来保存id。

如果我执行此代码两次失败,因为存在重复ID(1 id)

    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 :(得分:0)

persist()只是注册要持久化的对象。它只有在commit()或flush()之后才会被插入。如果在persist()之后调用flush(),它将被插入。

无法理解您为何会获得重复ID。打开最好的日志记录以查看正在执行的SQL。

一个问题可能是你的initialValue = 0,尝试删除或将其更改为1.