Java 由于以下原因导致H2数据库出现Hibernate错误:org.H2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键

Java 由于以下原因导致H2数据库出现Hibernate错误:org.H2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键,java,hibernate,h2,Java,Hibernate,H2,启动服务器时,我收到JdbcSQLIntegrityConstraintViolationException异常 似乎在使用时出现了一些问题,早些时候它使用的是旧版本的H2文件,但现在不起作用 我的curren H2版本是: 实现组:“com.h2数据库”,名称:“h2”,版本:“1.4.200” 老年人是: 编译组:“com.h2数据库”,名称:“h2”,版本:“1.4.193” 我的类使用了简单的map变量,比如:private-map-extraData 有人能告诉我,怎么解决这个问题吗?

启动服务器时,我收到
JdbcSQLIntegrityConstraintViolationException
异常

似乎在使用
时出现了一些问题,早些时候它使用的是旧版本的H2文件,但现在不起作用

我的curren H2版本是:

实现组:“com.h2数据库”,名称:“h2”,版本:“1.4.200”

老年人是:

编译组:“com.h2数据库”,名称:“h2”,版本:“1.4.193”

我的类使用了简单的map变量,比如:
private-map-extraData

有人能告诉我,怎么解决这个问题吗??? 谢谢

以下是我的XML代码片段:


pojo.MachineInstructionType
pojo.machineininstructionstatus
原因:org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键冲突:“主键在”“”“.PAGE_index上”;SQL语句:
ALTER TABLE PUBLIC.MACHINEINSTRUCTION_EXTRADATA添加约束PUBLIC.FKROHO504EJPG9G4R81YYKTV44K外键(EXTRADATA)引用PUBLIC.MACHINEINSTRUCTION(MACHINEID)NOCHECK[23505-200]
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:459)
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
位于org.h2.message.DbException.get(DbException.java:205)
位于org.h2.message.DbException.get(DbException.java:181)
在org.h2.pagestore.db.PageDataIndex.add(PageDataIndex.java:125)上
位于org.h2.pagestore.pagestore.addMeta(pagestore.java:1804)
位于org.h2.pagestore.db.PageBtreeIndex.(PageBtreeIndex.java:65)
位于org.h2.pagestore.db.PageStoreTable.addIndex(PageStoreTable.java:183)
位于org.h2.command.ddl.AlterTableAddConstraint.createIndex(AlterTableAddConstraint.java:298)
在org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:223)
在org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:78)
位于org.h2.engine.MetaRecord.execute(MetaRecord.java:60)
位于org.h2.engine.Database.open(Database.java:759)
位于org.h2.engine.Database.openDatabase(Database.java:307)
位于org.h2.engine.Database。(Database.java:301)
位于org.h2.engine.engine.openSession(engine.java:74)
位于org.h2.engine.engine.openSession(engine.java:192)
位于org.h2.engine.engine.createSessionAndValidate(engine.java:171)
位于org.h2.engine.engine.createSession(engine.java:166)
位于org.h2.engine.engine.createSession(engine.java:29)
位于org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340)
JdbcConnection(JdbcConnection.java:173)
JdbcConnection(JdbcConnection.java:152)
位于org.h2.Driver.connect(Driver.java:69)
位于org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
... 35多

不幸的是,H2 1.4.*和旧版本没有自动升级程序,这由用户负责。

(即将推出的H2 2.0将内置升级实用程序,并将拒绝在未升级的情况下打开旧文件以避免此类问题。)

1.4.196和更早的版本有一个缺陷,带有索引和引用约束的一些组合,在1.4.197中修复了该缺陷,但未提供旧版PageStore引擎的升级路径。MVStore也有类似的升级问题,但已修复


现在您的数据库似乎已损坏,因为未执行升级。您需要编写一些
org.h2.api.DatabaseEventListener
的虚拟实现,将其放入应用程序的类路径(如果使用单独的h2服务器进程,则为服务器的类路径),然后使用
打开数据库;数据库\u EVENT\u LISTENER='path.to.YourListener'
附加到JDBC连接URL。错误的约束将记录到侦听器中。之后,您将能够使用
脚本到'filename.SQL'
命令将数据库导出到SQL脚本,并创建一个新的数据库文件,并使用来自'filename.SQL'
运行脚本将其填充到该脚本中。谢谢您的帮助。如果可行,我会尝试在这里更新。
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PRIMARY KEY ON """".PAGE_INDEX"; SQL statement:
ALTER TABLE PUBLIC.MACHINEINSTRUCTION_EXTRADATA ADD CONSTRAINT PUBLIC.FKROHO504EJPG9G4R81YYKTV44K FOREIGN KEY(EXTRADATA) REFERENCES PUBLIC.MACHINEINSTRUCTION(MACHINEID) NOCHECK [23505-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:459)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.pagestore.db.PageDataIndex.add(PageDataIndex.java:125)
at org.h2.pagestore.PageStore.addMeta(PageStore.java:1804)
at org.h2.pagestore.db.PageBtreeIndex.<init>(PageBtreeIndex.java:65)
at org.h2.pagestore.db.PageStoreTable.addIndex(PageStoreTable.java:183)
at org.h2.command.ddl.AlterTableAddConstraint.createIndex(AlterTableAddConstraint.java:298)
at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:223)
at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:78)
at org.h2.engine.MetaRecord.execute(MetaRecord.java:60)
at org.h2.engine.Database.open(Database.java:759)
at org.h2.engine.Database.openDatabase(Database.java:307)
at org.h2.engine.Database.<init>(Database.java:301)
at org.h2.engine.Engine.openSession(Engine.java:74)
at org.h2.engine.Engine.openSession(Engine.java:192)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171)
at org.h2.engine.Engine.createSession(Engine.java:166)
at org.h2.engine.Engine.createSession(Engine.java:29)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:173)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:152)
at org.h2.Driver.connect(Driver.java:69)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
... 35 more