Как сопоставить вложенную коллекцию Map‹Key,List‹Values›› с аннотациями JPA в спящем режиме?

У меня есть класс, я не уверен, как правильно аннотировать.

Моя цель для 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
}

person Nathan Feger    schedule 02.06.2009    source источник
comment
так что его список упорядочен на основе расположения в списке, вы можете перефразировать?   -  person wds    schedule 02.06.2009


Ответы (3)


Я не думаю, что с помощью 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
}

Остальная часть сопоставления зависит от вашей конкретной ситуации, но довольно проста.

person Maarten Winkels    schedule 02.06.2009

Вот блог о сборе коллекций в спящем режиме http://blog.xebia.com/2007/10/05/mapping-multimaps-with-hibernate/

Надеюсь, это поможет. Мне это помогло.

С уважением, Антон

person Anton    schedule 04.06.2009

Обратите внимание, что указанная ссылка на документацию Hibernate кажется устаревшей, я нашел следующую рабочую: http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html

person ngeek    schedule 16.04.2010