我正在使用MySQL并拥有以下实体:
class MyEntity {
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="id")
private Integer id;
}
但是,我仍然希望能够手动设置ID!
问题是INSERT永远不会插入id列。例如,什么时候 这样做:
MyEntity e = new MyEntity();
e.setId(15);
em.persist(e);
em.flush();
em.refresh(e);
将进行以下查询:
INSERT INTO myEntities (col1, col2, col3) VALUES (?, ?, ?)
SELECT id, col1, col2, col3 FROM myEntities WHERE (id = 15)
因此ID仍会自动生成,而refresh()
会自动生成
结果为EntityNotFoundException
。
如果我根本没有设置@GeneratedValue
,那么这个案例就行了,
但是当值自动生成时,将不会调用LAST_INSERT_ID()
。
是否可以手动设置id列 自动,就像在MySQL?
答案 0 :(得分:2)
JPA不适合这种情况(也不是JDO);它假定您自己设置ID,或者使用提供的生成器生成它。 DataNucleus通过添加扩展 @Extension(key =“strategy-when-notnull”,value =“true”) 当您未设置“id”值时将生成该值,并在您提供时使用您的值。也许其他实现允许类似的东西?
- 安迪(DataNucleus)
答案 1 :(得分:0)
使用EclipseLink,手动分配ID将适用于基于TABLE的排序和SEQUENCE对象排序,但不适用于IDENTITY。