java - @GenerationType.IDENTITY 失败超过 10

标签 java mysql hsqldb identity

我正在从事一个项目,我需要存储一些数据(当然还有其他数据)。生产数据库将是MySQL,但对于我的测试,我使用 HyperSQL (又名 HSQLDB)。

我的所有@Enitity类都有相应的@Id字段和@GenerateValue(strategy = GenerationType.IDENTITY)让数据库生成那个领域。一切都工作正常,直到我尝试在 HSQLDB 中加载一些数据并收到错误:

java.sql.SQLIntegrityConstraintViolationException: 
    violación del restricción de integridad: 
    violación de índice o clave única; UK_... table: OPERACION

消息“violación del retricción de integridad: violación de índice o clave única”表示“完整性约束违规:主键或唯一索引违规”(我不知道)不知道这是否是 Locale 设置为英语时的消息,但翻译是这样的)

我将记录器设置为 TRACE 以获取全貌,并意识到在表 OPERACION 中生成的 id 字段最多为 10,并且没有问题,但在第 11 个注册表中,它给我消息 SqlExceptionHelper:139 - 无法执行语句 [n/a],然后引发异常。

有没有办法配置HSQLDB以使用IDENTITY生成更多@Id值?这是 @GenerationType.IDENTITY 策略还是数据库本身的问题?在生产环境中我必须考虑所选策略是否存在任何问题?

预先感谢您的回答。

编辑#1

我一直在研究 HyperSQL 文档,在上一个版本(以及之前的版本)中它支持身份生成。为了以防万一,我切换到了最新版本 2.3.4 (我使用的是 2.3.2),但结果是一样的。

我还尝试使用 @GenerationType.AUTO 策略,但错误仍然存​​在。也许我可以在persistence.xml中使用任何配置来告诉HSQLDB它必须生成多少个身份,但我仍然没有找到任何东西。如果有人知道该属性,请告诉我。

最佳答案

您能否检查一下表中是否已包含主键 = 10 的记录?你能删除表中的所有记录并运行你的程序吗?我认为该表已经包含 PK=10 的记录。

关于java - @GenerationType.IDENTITY 失败超过 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37499845/

相关文章:

java - 房间数据库实例无法解析 DAO 方法的符号

java - Travis CI JDK 设置为 oraclejdk8,但出现错误,指出源是 1.5

Java正则表达式找不到数字

php - 如何sql查询取决于行中的字段?

PhpMyAdmin | fatal error : Allowed memory size of 134217728 bytes exhausted (tried to allocate xxxxxx bytes) in Unknown on line 0

java - orphanRemoval 在 PostgreSQL 中工作但在 hsqldb 中不起作用

java - 无法删除 HSQLDB 文件

java - 比较 kotlin 中的两个列表

php - 在 LAMP 配置中创建虚 URL

sql - HSQLDB 2.2.9 运行脚本+SqlFile