У меня есть класс Player
, который содержит список Accessory
объектов. Есть два вида аксессуаров. В SocketedAccessories есть список SocketJewels, а у MagicAccessories есть список MagicEnchantments.Hibernate collection несколько типов
На уровне базы данных есть таблица players
, которая представляет плеер, и таблицу accessories
, которая содержит список аксессуаров. Принадлежности имеют поле типа, которое указывает, являются ли они сокетными или магическими, а столбцы, которые используются только одним типом, просто оставлены пустыми для записей другого типа. Есть socket_jewels
и magic_enchantments
столы, представляющие драгоценности сокета или волшебные заклинания на каждом аксессуаре.
Я пытаюсь выяснить правильный способ сопоставить это с Hibernate. Один из способов был бы для игрока иметь два списка аксессуаров: один для SocketedAccessories и один для MagicAccessories. Это кажется нежелательным. Я хочу, чтобы указать, что у игрока должно быть поле List<Accessory> accessories
, которое содержит оба типа вещей.
Есть ли способ сообщить Hibernate, либо в hbm.xml, либо в аннотации, чтобы сделать это?
Это хорошая новость! Хотя, похоже, что «Аксессуар» должен быть базовым классом, а не интерфейсом, если я хочу иметь список из них? –
@CaptainAwesomePants Аксессуар может быть интерфейсом. Но вам, возможно, придется использовать hbm. В документации на гибернативный ядро прямо указано, что вы можете использовать интерфейсы. Я добавлю ссылку на другой ответ, охватывающий случай интерфейсов с JPA. –
А, я вижу, я пропустил тот факт, что Payment был интерфейсом (а также пропустил бит «аннотирование интерфейсов в данный момент не поддерживается»). Спасибо! –