尝试在休眠中映射 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> 时唯一索引或主键冲突的主要内容,如果未能解决你的问题,请参考以下文章

在java 8中将地图映射转换为单个值列表[关闭]

JPA Map映射

EL 通过整数键访问映射值

util之Map

如何在 json 有效负载中格式化 Map<Entity,integer>

Java中Map的 entrySet() 详解以及用法(四种遍历map的方式)