Как сопоставить вложенную коллекцию, 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
}
Ответы
Ответ 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
}
Остальная часть отображения зависит от вашей конкретной ситуации, но довольно проста.
Ответ 2
Вот блог о коллекции коллекций в hibernate http://blog.xebia.com/2007/10/05/mapping-multimaps-with-hibernate/
Надеюсь, это поможет. Это помогло мне.
С уважением,
Антон
Ответ 3
Обратите внимание, что ссылка на документацию Hibernate устарела, я нашел следующее: http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html