J'ai une classe Player
qui contient une liste d'objets Accessory
. Il existe deux types d'accessoires. SocketedAccessories a une liste de SocketJewels, et MagicAccessories a une liste de MagicEnchantments. Au niveau de la base de données, il existe un tableau players
représentant le lecteur et un tableau accessories
contenant une liste d'accessoires. Les accessoires ont un champ type qui indique s'ils sont ensachés ou magiques, et les colonnes qui ne sont utilisées que par un type sont simplement laissées vides par les entrées de l'autre type. Il ya socket_jewels
et magic_enchantments
tables, représentant les bijoux de douille ou les enchantements magiques sur chaque accessoire.Hibernate collection plusieurs types
J'essaie de trouver la bonne façon de mapper cela avec Hibernate. Une façon serait que le joueur ait deux listes d'accessoires, une pour SocketedAccessories et une pour MagicAccessories. Cela semble indésirable, cependant. Ce que je veux, c'est un moyen de spécifier que le joueur doit avoir un champ List<Accessory> accessories
qui contient les deux types de choses.
Existe-t-il un moyen de dire à Hibernate, dans hbm.xml ou dans les annotations, de le faire?
C'est une bonne nouvelle! Bien que, il semble que "Accessoire" doit être une classe de base et pas une interface si je veux avoir une liste d'eux? –
@CaptainAwesomePants Accessory peut être une interface. Mais vous devrez peut-être utiliser hbm alors. La documentation de base d'hibernate mentionne explicitement que vous pouvez utiliser des interfaces. Je vais ajouter un lien vers une autre réponse couvrant le cas des interfaces avec JPA. –
Ah, je vois, j'ai raté le fait que Payment était une interface (et aussi raté le bit "annotating interfaces is currently not supported"). Je vous remercie! –