首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA: Id列可自动和手动设置

问JPA: Id列可自动和手动设置
EN

Stack Overflow用户
提问于 2009-05-20 09:08:57
回答 2查看 5.1K关注 0票数 3

我使用的是MySQL,具有以下实体:

代码语言:javascript
复制
class MyEntity {
    @Id
    @GeneratedValue(strategy=IDENTITY)
    @Column(name="id")
    private Integer id;
}

但是,我仍然希望能够手动设置id!

问题是INSERT永远不会插入id列。例如,执行此操作时:

代码语言:javascript
复制
MyEntity e = new MyEntity();
e.setId(15);
em.persist(e);
em.flush();
em.refresh(e);

将进行以下查询:

代码语言:javascript
复制
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中那样自动设置?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-22 16:45:10

使用EclipseLink,手动分配ids将适用于基于表的排序和序列对象排序,但不适用于身份。

票数 0
EN

Stack Overflow用户

发布于 2009-05-20 10:31:39

JPA不能满足这种情况( JDO也不能);它假定您要么自己设置id,要么使用提供的生成器生成id。DataNucleus通过添加@ extension (key=“策略- when -notnull”,value="true")进行了扩展,它将在您没有设置"id“值时生成值,如果您提供了值,则使用您的值。也许其他实现允许类似的事情?

--安迪(DataNucleus)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/886961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档