Hibernate集合中使用HashMap<Entity,Enum>(ElementCollection)报错求助
问题原因分析
你同时混用了@ElementCollection和@OneToMany注解,这是核心错误:
@OneToMany仅用于关联实体类,但你的Map值是枚举MyEnum(非实体),不符合该注解的使用要求,因此Hibernate抛出“目标是未映射类”的异常。@ElementCollection专门用于映射非实体类型的集合(比如枚举、基本类型、嵌入式类),但你错误地叠加了@OneToMany,导致注解逻辑冲突。
正确配置方案
要实现Map<B, MyEnum>的映射(B是实体,MyEnum是枚举),调整注解如下:
@Entity class A { private int id; // 更多字段 @ElementCollection(targetClass = MyEnum.class) @CollectionTable( name = "A_B", joinColumns = @JoinColumn(name = "A_id") ) @MapKeyJoinColumn(name = "B_id") // 关联实体B作为Map的键 @Enumerated(EnumType.STRING) private Map<B, MyEnum> value = new HashMap<>(); // getters和setters }
关键调整说明
- 移除
@OneToMany、@JoinTable、@MapKeyColumn、@MapKeyClass这些不符合场景的注解:- 用
@CollectionTable替代@JoinTable,用于定义元素集合的关联表。 - 用
@MapKeyJoinColumn指定关联实体B的外键列,因为Map的键是实体类B,不是普通列值。
- 用
- 关联表
A_B的结构会自动包含:A_id(外键关联A的主键)、B_id(外键关联B的主键)、存储MyEnum的列(可通过@Column自定义列名)。
内容的提问来源于stack exchange,提问作者meowth
相关产品推荐
相关产品推荐

