Hibernate коллекция нескольких типов - PullRequest
1 голос
/ 15 апреля 2010

У меня есть класс Player, который содержит список Accessory объектов. Есть два вида аксессуаров. У SocketedAccessories есть список SocketJewels, а у MagicAccessories есть список MagicEnchantments.

На уровне базы данных есть таблица players, которая представляет игрока, и таблица accessories, которая содержит список аксессуаров. У аксессуаров есть поле типа, которое указывает, являются ли они сокетами или магическими, а столбцы, которые используются только одним типом, просто остаются пустыми для записей другого типа. На каждом аксессуаре есть столы socket_jewels и magic_enchantments, представляющие драгоценные камни или магические чары.

Я пытаюсь найти правильный способ сопоставить это с Hibernate. Один из способов заключается в том, чтобы у игрока было два списка аксессуаров, один для SocketedAccessories и один для MagicAccessories. Это кажется нежелательным, хотя. Мне нужен способ указать, что у игрока должно быть поле List<Accessory> accessories, которое содержит оба типа вещей.

Есть ли способ сказать Hibernate, либо в hbm.xml, либо в аннотациях, сделать это?

1 Ответ

2 голосов
/ 15 апреля 2010

Есть ли способ сказать Hibernate, либо в hbm.xml, либо в аннотациях, сделать это?

То, что вы описываете, выглядит как Одиночная таблица на стратегию иерархии классов ( все свойства всех супер- и подклассов отображаются в одну и ту же таблицу, экземпляры различаются специальным столбцом дискриминатора ).

Вы можете отобразить это с помощью аннотаций и / или xml отображений (и иметь один List, Hibernate поддерживает полиморфные запросы, т.е. вы можете запрашивать суперкласс Accessory и получить список подклассов).

Обновление: Если аксессуар является интерфейсом, взгляните на этот предыдущий ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...