我在我的实体中使用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表,我可以看到该寄存器。
提前致谢!!!
答案 0 :(得分:0)
persist()只是注册要持久化的对象。它只有在commit()或flush()之后才会被插入。如果在persist()之后调用flush(),它将被插入。
无法理解您为何会获得重复ID。打开最好的日志记录以查看正在执行的SQL。
一个问题可能是你的initialValue = 0,尝试删除或将其更改为1.