如何使用Hibernate JPA注释映射嵌套集合Map<Key,List<Values>>?

15

我有一个类,但不确定如何正确地进行注释。

对于Holder::data的目标:

  • 列表应该通过数组中元素的自然顺序而非比较器来维护顺序(如果ndx列有用的话,可以使用它)。
  • Holder将是数据的唯一引用,因此Cascade all可能也适用。

如果这样做可以使设计更加简洁,我也可以考虑去除map并采用不同的设计。

@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
}

“使其列表按照列表中的排列顺序排序”,您能否重新表述一下? - wds
3个回答

10

我认为使用Hibernate(-core)不可能映射任何集合的集合:

集合可以包含几乎所有其他Hibernate类型,包括所有基本类型、自定义类型、组件和当然还有对其他实体的引用。

(来自官方文档)

请注意几乎和集合类型的省略。

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

类似这样:

@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
}

其余映射取决于您的特定情况,但相当简单。


链接已失效,有效链接为:https://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html - Timon

3

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接