如何使用hibernate JPA注释映射嵌套集合Map <key,list <values>&gt;?</key,list <values>

时间:2009-06-02 12:26:18

标签: java hibernate collections jpa annotations

我有一节课,我不确定如何正确注释。

我对Holder :: data的目标:

  • 列表应该不是通过比较器维持顺序,而是通过数组中元素的自然顺序。 (如果有帮助,可以是ndx列。)
  • 持有人将只拥有数据,因此Cascade all也可能适用。

我也愿意采用不同的设计来移除地图,如果这样可以实现更清洁的设计。

@Entity
public class Holder extends DomainObject {
  private Map<Enum,List<Element>> data;
}

@Entity
public class Element extends DomainObject {
  private long valueId;
  private int otherData;
}

@Mappedsuperclass
public class DomainObject {
 // provides id
 // optimistic locking
 // create and update date
}

3 个答案:

答案 0 :(得分:9)

我认为hibernate(-core)不能映射任何集合集合:

  

收藏品几乎可以包含任何收藏品   其他Hibernate类型,包括所有   基本类型,自定义类型,组件,   当然,还有其他的参考   实体。

(来自the official doc

注意几乎以及遗漏了集合类型。

解决方法:您需要在集合持有者和元素之间引入一个新类型。您可以将此类型映射为实体或组件,它引用地图的原始内容,在本例中为列表。

类似的东西:

@Entity
public class Holder extends DomainObject {
  @OneToMany
  private Map<Enum,InBetween> inBetweens;
}

@Entity
public class InBetween extends DomainObject {
  @OneToMany
  private List<Element> elements;
}

@Entity
public class Element extends DomainObject {
  private long valueId;
  private int otherData;
}

@Mappedsuperclass
public class DomainObject {
 // provides id
 // optimistic locking
 // create and update date
}

映射的其余部分取决于您的具体情况,但相当简单。

答案 1 :(得分:2)

这是一个关于hibernate http://blog.xebia.com/2007/10/05/mapping-multimaps-with-hibernate/

中集合集合的博客

希望它会有所帮助。它帮助了我。

此致 安东

答案 2 :(得分:-1)

请注意,Hibernate文档的推荐链接似乎已过时,我发现以下工作:http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html