【问题标题】:Hibernate persist Map<String, String> without referencing another tables休眠持久化 Map<String, String> 而不引用其他表
【发布时间】:2017-06-01 13:12:29
【问题描述】:

你能帮我用 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;

更新

如果MyEnum 是未映射的类,您能否解释一下如何持久化Map&lt;MyEnum, String&gt;

【问题讨论】:

    标签: java hibernate jpa orm hibernate-mapping


    【解决方案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>)
    

    【讨论】:

    • 另外,如果我们使用泛型,targetClass 也可以省略
    • @MaciejKowalski 感谢您的回答!如果MyEnum 是未映射的类,您能否解释一下如何制作Map&lt;MyEnum, String&gt;
    • 根据我在准备可能的 JPA 证书时的笔记。请在编辑后的帖子中找到答案。
    • 有人知道我是否可以在使用 Hibernate 的 XML 映射中做到这一点?
    • 我可以使用 Map 吗?
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多