一尘不染

Hibernate坚持地图 没有引用其他表

hibernate

您能帮我与Hibernate保持字符串映射吗?

地图值来自客户端,并且是随机的,因此我不想为地图的值存储单独的表

例外

原因:org.hibernate.AnnotationException:找不到关联的类:java.lang.String

@Entity
public class UserConfig {

    @Id
    @SequenceGenerator(sequenceName = "CONFIG_SEQ", name = "ConfigSeq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ConfigSeq")
    private Long id;

    @ElementCollection(targetClass = String.class)
    @CollectionTable(name = "MAP")
    @MapKey(name="key")
    @Column(name="value")
    private Map<String, String> map;

更新资料

Map<MyEnum, String>如果MyEnum是未映射的类,也请您说明一下如何继续吗?


阅读 250

收藏
2020-06-20

共1个答案

一尘不染

根据规范,您应该这样注释地图:

    @ElementCollection(targetClass = String.class)
    @CollectionTable(name = "MAP")
    @MapKeyColumn(name="key")
    @Column(name="value")
    private Map<String, String> map;

所以@MapKeyColumn,而不是@MapKey

当地图定义为以下方式时,应使用此方法进行注释:

private Map<Basic, Basic> map; // (i.e. Map<String, String>)

@MapKey将地图定义为时,可以使用注释:

private Map<Basic, Entity> map; // (i.e. Map<String, User>)

最后,@MapKeyEnumerated在您定义了地图广告后,您可以使用注释:

private Map<Enumeration, Basic> map; // (i.e. Map<MyEnum, String>)
2020-06-20