当前位置: 首页 > news >正文

java generatedvalue_java – 在JPA @GeneratedValue列中手动指定主键的值

我有一个实体,它有一个主键/ 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特定的查询提示,注释和类)。

编辑(响应答案):

自定义排序:我试图实现我自己的排序。我尝试子类化DefaultSequence,但EclipseLink会告诉我Internal Exception:无法找到org.eclipse.persistence.platform.database.MySQLPlatform。但是我已经检查过:该类在类路径上。

所以我分类另一个类NativeSequence:

public class MyNativeSequence extends NativeSequence {

public MyNativeSequence() {

super();

}

public MyNativeSequence(final String name) {

super(name);

}

@Override

public boolean shouldAlwaysOverrideExistingValue() {

return false;

}

@Override

public boolean shouldAlwaysOverrideExistingValue(final String seqName) {

return false;

}

}

但是,我得到的是:

javax.persistence.RollbackException: Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.ValidationException

Exception Description: Null or zero primary key encountered in unit of work clone [de.dfv.datenbank.domain.Mitarbeiter[ id=null ]], primary key [null]. Set descriptors IdValidation or the "eclipselink.id-validation" property.

at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:102)

...

Caused by: Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.ValidationException

Exception Description: Null or zero primary key encountered in unit of work clone [de.dfv.datenbank.domain.Mitarbeiter[ id=null ]], primary key [null]. Set descriptors IdValidation or the "eclipselink.id-validation" property.

at org.eclipse.persistence.exceptions.ValidationException.nullPrimaryKeyInUnitOfWorkClone(ValidationException.java:1451)

...

(为了清晰起见,堆栈跟踪缩短)。这是我以前听到的同样的消息。不应该我的子类NativeSequence?如果是这样,我不知道为Sequence或StandardSequence中的抽象方法执行什么。

也许值得注意的是,简单的子类化(不覆盖任何方法),类的工作原理如预期。但是,在shouldAlwaysOverrideExistingValue(…)中恢复为false将不会生成单个值(我逐步浏览程序,并且getGeneratedValue()不被调用一次)。

另外,当我在一个交易中插入某种某种类型的8个实体时,它在数据库中导致了11个记录(这是什么?!)。

编辑(2012-09-01):我还没有解决问题的办法,实现我自己的顺序没有解决。我需要的是一种能够不能明确设置Id的方式(因此它将被自动生成),并且能够显式设置一个Id(因此将用于在数据库中创建记录)。

我试图将列自定义为auto_increment,并忽略@GeneratedValue,但是验证将会启动,不允许我保存这样一个实体。如果我指定一个值!= 0和!= 0,mysql将会抱怨一个重复的主键。

我用尽了想法和选择来尝试。任何? (开始赏金)

相关文章:

  • java io byte_JavaIO之字节流学习笔记
  • 八大排序方法java_八大排序java
  • java一个类怎么调用另一个类的变量_如何在一个类里调用到另一个类的变量的值...
  • java return后执行_java 问题 如果前一个return执行了 那么后面的一系列System.out.println 还会执行吗...
  • java持久层_java访问持久层技术的进化
  • java set encoding file_系统变量file.encoding对Java的运行影响有多大?(转)good
  • java运行一段时间变慢_tomcat 运行程序很慢 运行一段时间就报错: java.lang.OutOfMemoryError: PermGen space...
  • java的开发人员数量_Java开发人员最容易出现的几类错误
  • 字符串加减转数字java_剑指Offer解题报告(Java版)——字符串转换为数字 49
  • Java txt 下拉刷新_「小程序JAVA实战」小程序页面的上拉下拉刷新(50)
  • Java语言西安交大高起专_2018年西安交大网络学院高起专/本英语入学考试复习题...
  • php 生成不了zip文件怎么打开吗,PHP生成压缩包,不带根目录 | 学步园
  • php变量持有对象的引用,我对PHP变量引用、对象引用的理解
  • php 自动填写表单,PHP自动生成表单代码分享
  • 记事本底部的java切换,如何使用java操作记事本(转)
  • 【comparator, comparable】小总结
  • Angularjs之国际化
  • Apache的80端口被占用以及访问时报错403
  • AWS实战 - 利用IAM对S3做访问控制
  • Facebook AccountKit 接入的坑点
  • LeetCode算法系列_0891_子序列宽度之和
  • Less 日常用法
  • magento2项目上线注意事项
  • node-glob通配符
  • Vim 折腾记
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue.js源码(2):初探List Rendering
  • VuePress 静态网站生成
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 第2章 网络文档
  • 给初学者:JavaScript 中数组操作注意点
  • 如何编写一个可升级的智能合约
  • 算法---两个栈实现一个队列
  • 微服务核心架构梳理
  • 06-01 点餐小程序前台界面搭建
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​Spring Boot 分片上传文件
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #include
  • #每天一道面试题# 什么是MySQL的回表查询
  • (C)一些题4
  • (C++)八皇后问题
  • (ZT)薛涌:谈贫说富
  • (第61天)多租户架构(CDB/PDB)
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (转)Sql Server 保留几位小数的两种做法
  • ./configure,make,make install的作用
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET与 java通用的3DES加密解密方法
  • /etc/shadow字段详解
  • @ConfigurationProperties注解对数据的自动封装