我使用的是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中那样自动设置?
发布于 2009-05-22 16:45:10
使用EclipseLink,手动分配ids将适用于基于表的排序和序列对象排序,但不适用于身份。
发布于 2009-05-20 10:31:39
JPA不能满足这种情况( JDO也不能);它假定您要么自己设置id,要么使用提供的生成器生成id。DataNucleus通过添加@ extension (key=“策略- when -notnull”,value="true")进行了扩展,它将在您没有设置"id“值时生成值,如果您提供了值,则使用您的值。也许其他实现允许类似的事情?
--安迪(DataNucleus)
https://stackoverflow.com/questions/886961
复制相似问题