我使用jpa在无状态bean中创建一个新实体,“hg”表是一个mysql innodb,主键是autoincrement id列:
[...]
// if we haven't an ID, it's a new hg
if (hg.getIdHg() == null) {
hg.setDate(new Date());
hg.setIdCli(cli);
}
// fill fields
hg.setIdOp(op);
[...]
hg.setText(text);
// add hg to cli
if (!cli.getHgCollection().contains(hg)) {
Cli.getHgCollection().add(hg);
}
//
jpa.persist(hg);
jpa.flush();
//
LOG.info("***hg stored with id " + hg.getIdHg());
[...]
在hg中,实体id列的定义如下:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_hg")
private Integer idHg;
它几乎可以工作,但在3年中我遇到了6个hg.getidhg()错误的情况,即:插入的记录的id为2809643,但hg.getidhg()返回2809638!
在persist、flush和日志行之间没有什么区别,前后都没有奇怪的代码,所以我不明白为什么我会得到一个旧的id。
当然,我已经在google上搜索过了,但是我没有发现任何有用的东西,我正在考虑更改表结构,去掉自动生成的id并添加一个计算列,但是它涉及大量的更改,所以我更愿意找到一种方法来解决这个问题。
编辑:我正在使用glassfish4.1,jpa提供程序是eclipselink(jpa2.1)
暂无答案!
目前还没有任何答案,快来回答吧!