尝试在休眠中映射 Map<Integer,String> 时唯一索引或主键冲突
Posted
技术标签:
【中文标题】尝试在休眠中映射 Map<Integer,String> 时唯一索引或主键冲突【英文标题】:Unique index or primary key violation while trying to map Map<Integer,String> in hibernate 【发布时间】:2016-10-09 11:40:53 【问题描述】:我正在使用 H2 嵌入式数据库和 Hibernate 5。我正在尝试以这种方式在休眠中映射 HashMap:
@Entity
public class TestMapping
@Id
@GeneratedValue
private Long id;
@ElementCollection
private Map<Integer,String> map = new HashMap<>();
然后我坚持 TestMapping 对象包含几个键值对。当我试图通过执行以下操作在 Intellij 中查看结果时:
SELECT t.* FROM PUBLIC.TESTMAPPING t LIMIT 501
我收到此错误:
[23505][23505] Unique index or primary key violation: "PRIMARY KEY ON """".PAGE_INDEX"; SQL statement: ALTER TABLE PUBLIC.TESTMAPPING_MAP ADD CONSTRAINT PUBLIC.FK8CYRSMJWNRD21DCB8T901RHA0 FOREIGN KEY(TESTMAPPING_ID) REFERENCES PUBLIC.TESTMAPPING(ID) NOCHECK [23505-176]
我尝试添加 @MapKeyColumn
没有任何效果。
mydb.trace.db 包含:
10-09 13:38:28 database: ALTER TABLE PUBLIC.TESTMAPPING_IMAGES ADD CONSTRAINT PUBLIC.FK9V996C496B8GCB45MJI7WDA0D FOREIGN KEY(TESTMAPPING_ID) REFERENCES PUBLIC.TESTMAPPING(ID) NOCHECK
org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "PRIMARY KEY ON """".PAGE_INDEX"; SQL statement:
ALTER TABLE PUBLIC.TESTMAPPING_IMAGES ADD CONSTRAINT PUBLIC.FK9V996C496B8GCB45MJI7WDA0D FOREIGN KEY(TESTMAPPING_ID) REFERENCES PUBLIC.TESTMAPPING(ID) NOCHECK [23505-176]
10-09 13:38:29 database: ALTER TABLE PUBLIC.TESTMAPPING_IMAGES ADD CONSTRAINT PUBLIC.FK9V996C496B8GCB45MJI7WDA0D FOREIGN KEY(TESTMAPPING_ID) REFERENCES PUBLIC.TESTMAPPING(ID) NOCHECK
org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "PRIMARY KEY ON """".PAGE_INDEX"; SQL statement:
ALTER TABLE PUBLIC.TESTMAPPING_IMAGES ADD CONSTRAINT PUBLIC.FK9V996C496B8GCB45MJI7WDA0D FOREIGN KEY(TESTMAPPING_ID) REFERENCES PUBLIC.TESTMAPPING(ID) NOCHECK [23505-176]
【问题讨论】:
【参考方案1】:在 1.3.176 版本的 h2 控制台中似乎存在错误。 正如 here 建议的那样,升级到较新的 h2 版本可能会有所帮助。
【讨论】:
以上是关于尝试在休眠中映射 Map<Integer,String> 时唯一索引或主键冲突的主要内容,如果未能解决你的问题,请参考以下文章