Hibernate集合有多种类型

时间:2010-04-14 21:26:22

标签: java hibernate orm

我有一个类Player,其中包含Accessory个对象的列表。配件有两种。 SocketedAccessories有一个SocketJewels列表,MagicAccessories有一个MagicEnchantments列表。

在数据库级别,有一个表示播放器的players表,以及一个包含附件列表的accessories表。附件有一个类型字段,指示它们是插座还是神奇的,而仅由一种类型使用的列只是由另一种类型的条目留空。有socket_jewelsmagic_enchantments个表,代表每个附件上的插座宝石或魔法附魔。

我试图弄清楚用Hibernate映射这个的正确方法。一种方法是玩家有两个配件列表,一个用于SocketedAccessories,一个用于MagicAccessories。但这似乎是不可取的。我想要的是一种指定玩家应该包含两种类型的字段List<Accessory> accessories的方法。

有没有办法告诉Hibernate,无论是在hbm.xml还是注释中,都可以这样做?

1 个答案:

答案 0 :(得分:2)

  

有没有办法告诉Hibernate,无论是在hbm.xml还是注释中,都可以这样做?

您所描述的内容看起来像每个类层次结构策略的单个表所有超级和子类的所有属性都映射到同一个表中,实例通过特殊的鉴别器进行区分柱)。

您可以使用annotations 和/或xml mappings(并且只有一个List来映射它,Hibernate支持多态查询,即您可以查询Accessory超类并获取子类列表。)

更新:如果Accessory是一个界面,请查看this previous answer