Карта отображения <Интерфейс, Интерфейс> с Hibernate - PullRequest
1 голос
/ 22 декабря 2009

Эй, люди, у меня есть следующая карта *, которая доставляет мне много хлопот:

Map<MetricSourceInterface, AliasesInterface>

MetricSourceInterface - это сущность с простыми свойствами. AliasesInterface - это объект, имеющий только Id и список строк.

Hibernate создает схему базы данных, поэтому нет никаких проблем с ее изменением.

Кстати, это попытка сопоставления с дополнительной проблемой:

Map<MetricSourceInterface, List<String>>

Кто-нибудь знает правильный способ решить эту проблему?

Для этого есть только одно ограничение, я не хочу создавать UserType для AliasesInterface или List

Спасибо заранее:)


* отредактировано с исправлением pstanton:)

1 Ответ

4 голосов
/ 22 декабря 2009

Пока AliasesInterface действительно является сущностью в смысле Hibernate, действительно нет проблем с отображением этого:

@OneToMany(targetEntity=AliasInterface.class)
@MapKeyManyToMany(targetEntity=MetricSourceInterface.class,  joinColumns=@JoinColumn(name="metric_source_id"))
private Map<MetricSourceInterface, AliasesInterface> myMap;

Обратите внимание, что в вышесказанном предполагается, что и AliasInterface, и MetricSourceInterface являются сущностями; если они действительно являются интерфейсами, вам нужно будет обратиться к их конкретным реализациям.

Имейте в виду, что @MapKeyManyToMany является расширением Hibernate для JPA. Более подробная информация / примеры по картографическим коллекциям находятся в документах Hibernate .

Обновление : тот же подход с использованием файлов сопоставления XML:

<map name="myMap">
  <key column="owner_id"/> <!-- FK to owner entity table -->
  <map-key-many-to-many column="metric_source_id" class="MetricSourceInterface"/>
  <one-to-many class="AliasesInterface"/>
</map>

Здесь есть подробнее и другие примеры здесь .

...