【问题标题】:Alternative to @ElementCollection using JPA 1.0 for persisting Map<String,String>?使用 JPA 1.0 替代 @ElementCollection 来持久化 Map<String,String>?
【发布时间】:2014-05-20 09:06:48
【问题描述】:

我正在尝试将一个简单的属性映射作为我的一个持久对象的键值对持久化。我在这件事上找到了一个很好的指南here。但它只显示了当键的值是映射对象(具有“映射者”属性)时如何映射。我的场景比这更简单。我只需要为一个键值对保留一个Map&lt;String, String&gt;。我发现我可以使用@ElementCollection,但它仅在 JPA 2 上受支持(我正在开发的平台仍在 JPA1 上)。

这是我的代码到目前为止的样子:

@Entity
public class MyClass {

    private Map<String, String> attributes;

    @OneToMany
    @MapKey(name="key")
    @JoinTable(name="MyClass_attributes")
    public Map<String, String> getAttributes () {
        return this.attributes;
    }

    public void setAttributes(Map<String, String> attributes) {
        this.attributes = attributes;
    }

}

但是我收到了这个错误:

Caused by: org.hibernate.AnnotationException: 
Use of @OneToMany or @ManyToMany targeting 
an unmapped class: mypackage.MyClass.attributes[java.lang.String]

【问题讨论】:

    标签: java hibernate jpa orm jpa-1.0


    【解决方案1】:

    尝试为地图的值创建一个类,例如 TargetClass。那么地图会是这样的:

    private Map<String, TargetClass> attributes;
    

    在这种情况下,JoinTable 不需要。

    【讨论】:

    • 这就是我试图避免的。对于非常简单的事情来说,这似乎开销很大。如果我能做这样的事情会很棒:stackoverflow.com/questions/3393649/… 但我需要 JPA 1 解决方案。
    • 使用 JPA 基本上是在处理开销。
    • 嗯...既然我们使用的是 Hibernate,我将简单地使用 @CollectionOfElements (org.hibernate.annotations.CollectionOfElements)
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2017-06-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多