java - 我想通过 JPA 映射 Map<Long, List<POJO>>

标签 java hibernate jpa annotations mapping

我想映射 Map<Long, List<ItemAttribute>>里面 @Entity类,其中 ItemAttribute 本身是 @Entity单独定义。

这是我用于映射的代码:

@Entity
@Table(name = "ITEM_ATTRIBUTE_GROUP")
public class ItemAttributeGroup implements Cloneable, Serializable
{
      @ElementCollection
      @MapKeyColumn(name="groupId")
      @JoinTable(name = "ATTRIBUTES_IN_GROUP", joinColumns = @JoinColumn(name = "groupId"),
                        inverseJoinColumns = @JoinColumn(name = "ID"))
      private Map<Long, List<ItemAttribute>> attributes = new HashMap<Long, List<ItemAttribute>>();
     //getters and setters........
}

ItemAttribute 是一个单独的类,如下所述:

@Entity
@Table(name = "ITEM_ATTRIBUTE")
public class ItemAttribute implements Cloneable, Serializable {
    private static final long serialVersionUID = -8017036630979138942L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Long id;

    @ElementCollection // this is a collection of primitives
    @JoinTable(name="ATTRIBUTE_VALUE_RANGE", joinColumns=@JoinColumn(name="ID"))
    @MapKeyColumn (name="RANGE_ID")// column name for map "key"
    @Column(name="VALUE")//  column name for map "value"
    private Map<String, String> attributeValueRange = new HashMap<String, String>();

    @ElementCollection // this is a collection of primitives
    @JoinTable(name="QUALIFIER_VALUE_RANGE", joinColumns=@JoinColumn(name="ID"))
    @MapKeyColumn (name="RANGE_ID")// column name for map "key"
    @Column(name="VALUE")//  column name for map "value"
    private Map<String, String> qualifierValueRange = new HashMap<String, String>();

    public Map<String, String> getAttributeValueRange() {
        return attributeValueRange;
    }

    public void setAttributeValueRange(Map<String, String> attributeValueRange) {
        this.attributeValueRange = attributeValueRange;
    }

    public Map<String, String> getQualifierValueRange() {
        return qualifierValueRange;
    }

    public void setQualifierValueRange(Map<String, String> qualifierValueRange) {
        this.qualifierValueRange = qualifierValueRange;
    }
}

问题出在我的代码中我无法识别的地方。 我收到此错误

Use of @JoinTable.inverseJoinColumns targeting an unmapped class: ItemAttributeGroup.attributes[java.util.List]

最佳答案

您需要创建一个中间类 ItemAttributes。

@Entity
public class ItemAttributes {

   @OneToMany
   private List<ItemAttribute> attributes;
}

@Entity
public class ItemAttributeGroup implements Cloneable, Serializable {

   @OneToMany
   private Map<Long, ItemAttributes> attributesMap;
}

关于java - 我想通过 JPA 映射 Map<Long, List<POJO>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15068642/

相关文章:

java - 萨克斯字符将元素分开

hibernate - java.security.PrivilegedActionException : java. lang.NoSuchMethodException:

java - 当链接实体名称不是从父实体名称派生时,如何避免使用 OneToOne 映射出现 NullPointerException?

java - hibernate JPA : 'IS EMPTY' condition doesn't work for collections passed as parameters

java - 业务验证错误 : Unexpected Internal Error. (-30003) - QuickBooks Java SDK

java - 两个和问题的两个不同实现的性能

java - 删除父项将子值设置为 NULL 而不删除它们

hibernate - 如何在 JPA 2.0 中编写带有 where 子句的 MAX 查询?

java - Hibernate映射问题: Multiple Embeddables + ElementCollections

java - 根据数据库值动态加载jTable中的Image