我在一个项目中工作,我需要存储一些数据(当然,还有其他的)。生产DB将是MySQL,但是对于我的测试,我使用的是HyperSQL (又名HSQLDB)。
我的所有@Enitity类都有相应的@Id字段和@GeneratedValue(strategy = GenerationType.IDENTITY),以便让DB生成该字段。在我尝试在HSQLDB中加载一些数据并得到错误之前,一切正常:
java.sql.SQLIntegrityConstraintViolationException:
violación del restricción de integridad:
violación de índice o clave única; UK_... table: OPERACION这条信息的意思是“完整性约束违反:主键或唯一索引违反”(当地区设置为英语时,我不知道这是否就是消息,但翻译是这样)。
我将记录器设置为TRACE以获得完整的图片,并意识到在表OPERACION中生成的id字段最多为10个,没有问题,但是在第11个注册表中,它给出了消息SqlExceptionHelper:139 - could not execute statement [n/a],然后引发异常。
是否有任何方法配置HSQLDB以生成更多的@Id值和IDENTITY?这是@GenerationType.IDENTITY策略还是DB本身的问题?在生产环境中,我必须考虑到的选择策略有什么问题吗?
提前谢谢你的回答。
编辑#1
我一直在学习HyperSQL文档,在上一个版本(以及之前的版本)中,它支持身份生成。以防万一,我切换到了上一个版本的2.3.4 (我使用的是2.3.2),但是结果是一样的。
另外,我尝试了@GenerationType.AUTO策略,但是错误仍然存在。也许我可以在persistence.xml中使用任何配置来告诉HSQLDB它必须生成多少标识,但我仍然什么也找不到。如果有人知道那个财产,请告诉我。
发布于 2016-05-28 14:03:54
请检查一下表中是否已经包含有主key=10的记录?您能从表中删除所有记录并运行您的程序吗?我认为这个表已经包含了PK=10的记录。
https://stackoverflow.com/questions/37499845
复制相似问题