2013-02-25 39 views
0

我想映射一个Map<Long, List<ItemAttribute>>@Entity类其中ItemAttribute本身是@Entity单独定义。我想映射一个地图<Long,List <POJO>>通过JPA

这里是我使用的映射代码:

@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", [email protected](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", [email protected](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; 
    } 
} 

而且问题是在我的代码,我无法某处鉴别。 我收到此错误

针对未映射的类使用@ JoinTable.inverseJoinColumns的: ItemAttributeGroup.attributes [java.util.List中]

+1

问题是? – home 2013-02-25 14:02:23

+0

对不起。我做了编辑。我也应该使用@Column注释,但是我无法确定如何在这种情况下映射Map的值字段。 – 2013-02-25 14:09:29

回答

3

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

@Entity 
public class ItemAttributes { 

    @OneToMany 
    private List<ItemAttribute> attributes; 
} 

@Entity 
public class ItemAttributeGroup implements Cloneable, Serializable { 

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

没有添加这个中级课程是不可能的? – 2013-02-25 14:12:13

+0

据我所知,添加一个中级课程是唯一的途径 – overmeulen 2013-02-25 14:15:41

+0

@overmeulen,我相信地图必须是@OneToMany? – sharakan 2013-02-25 14:16:50

相关问题