我正在从事一个项目,我需要存储一些数据(当然还有其他数据)。生产数据库将是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/