我有一个实体,它有一个主键/ ID字段,如下所示:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
这个效果很好我正在使用EclipseLink来创建DDL架构,列正确创建如下:
`id` bigint(20) NOT NULL AUTO_INCREMENT
然而,我有几个实体,我想要自己指定PK(这是一个将数据从旧数据库传输到我们正在构建的新数据库的小应用程序)。如果我指定POJO的ID(使用setId(Long id))并持久化,EclipseLink不保存它(即记录被保存,但是id由eclipseLink自动生成)。
有没有办法手动指定具有@GeneratedValue的列的值?
这里有一些关于这个问题的想法:
我试图通过不使用@GeneratedValue解决问题,但只需手动将列定义为AUTO_INCREMENT。但是,这迫使我手动提供ID,因为EclipseLink验证主键(因此它可能不为null,零或负数)。异常消息读取我应该指定eclipselink.id_validation,但这似乎没有任何区别(我注释到@PrimaryKey(validation = IdValidation.NONE)但仍然有相同的消息)。
澄清:我使用EclipseLink(2.4.0)作为持久性提供程序,我不能从其中切换(大部分项目依赖于eclipselink特定的查询提示,注释和类)。
编辑(响应答案):
自定义排序:我试图实现我自