Подтвердить что ты не робот

Как сопоставить вложенную коллекцию, Map <Key, List <Values ​​>>, с аннотациями спящего JPA?

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

Моя цель для Holder:: data:

  • Список должен поддерживать порядок не компаратором, а естественным упорядочением элементов в массиве. (Который может быть столбцом ndx, если это полезно.)
  • Владелец будет иметь единственную ссылку на данные, поэтому, возможно, Cascade также применим.

Я также открыт для другого дизайна, который удаляет карту, если это сделает более чистый дизайн.

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

Ответ 1

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

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