替代使用 JPA 1.0 @ElementCollection来持久化 Map<String,String>?



我正在尝试将一个简单的属性映射作为我的一个持久对象的键值对。我在这里找到了关于这个问题的好指南。但它只显示当键的值是映射对象(具有"映射者"属性)时如何映射。我的方案比这更简单。我所需要的只是为键值对保留一个Map<String, String>。我发现我可以使用@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]

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

private Map<String, TargetClass> attributes;

在这种情况下,连接表不需要。

相关内容

  • 没有找到相关文章

最新更新