2009-12-22 1 views
1

Эй, люди, у меня есть следующая карта *, которая дает мне много неприятностей:Mapping Map <Interface, интерфейс> с Hibernate

Map<MetricSourceInterface, AliasesInterface> 

MetricSourceInterface является юридическим лицом с простыми свойствами. ПсевдонимыИнтерфейс - это объект с идентификатором и списком строк.

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

На боковой ноте, это к югу проблема от попыток к карте:

Map<MetricSourceInterface, List<String>> 

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

Theres только одно ограничение для этого, я не хочу, чтобы создать UserType для AliasesInterface или Список

Thx заранее :)


* отредактирован с коррекцией pstanton в :)

+0

a 'Map' не является 'Collection' – pstanton

+0

@pstanton - map не является коллекцией в том смысле, что 'java.util.Map' не расширяет интерфейс' java.util.Collection'. «Карта» ** - **, однако часть рамок «Коллекции Java» и «Карта» - это, безусловно, коллекция с точки зрения Hibernate - тот же persister/loader и т. Д. – ChssPly76

+0

Это не очень хороший вопрос. – cherouvim

ответ

4

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

@OneToMany(targetEntity=AliasInterface.class) 
@MapKeyManyToMany(targetEntity=MetricSourceInterface.class, [email protected](name="metric_source_id")) 
private Map<MetricSourceInterface, AliasesInterface> myMap; 

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

Имейте в виду, что @MapKeyManyToMany является Hibernate extesion для JPA. Подробнее/примеры на mapping collections are in Hibernate docs.

Update: Тот же подход с использованием файлов сопоставления 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> 

Есть more details here и other examples here.

+0

Да, я работаю с их конкретными реализациями, как вы прокомментировали. Не могли бы вы, если это не так много, перевести аннотации на hbm sintax, пожалуйста? им не знаком с ними. – mcabral

+0

Thx много для вашего ответа и времени. – mcabral