Hibernate中的ManyToMany关系稍微复杂一些

时间:2012-07-30 03:19:39

标签: java database hibernate orm

我的数据库中有以下表格: 表:实体 表:国家 加入表:countries_entities

这是实体和国家之间的多对多关系,我在Entity.hbm.xml中定义了这样的:

<set name="country" table="countries_entities" cascade="all">
   <key column="entity_id" />
      <many-to-many column="country_id" class="pikefin.hibernate.Country" />
</set>

以下是联接表countries_entities的结构:

screenshot

default_country字段用于指定实体与多个国家/地区关联时的默认国家/地区。我的问题是,在hibernate中表示这个的适当方式是什么?我认为蛮力的方式是用CountryEntity.hbm.xml的配置文件创建一个全新的映射,但我认为通过某种方式扩展现有的多对多关系可能会有更优雅的方式。

1 个答案:

答案 0 :(得分:1)

我发现当你想要其他字段时,创建一个代表关联的二级类是有帮助的:

@Embeddable
public class CountryAssociation {
   ...
   private Country country;

   ...
   private boolean defaultCountry;
}

然后使用@ElementCollection:

 @ElementCollection
 @CollectionTable(name = "country_entities", joinColumns = @JoinColumn(name = "entity_id"))    
 private Set<CountryAssociation> countries;

我还会删除关联中的id字段,因为这种映射不需要它。

我的XML映射有点生疏,但您也可以在xml中表示此映射。

我相信xml会是这样的:

<set name="countries" table="country_entities">
  <key column="entity_id" />
  <composite-element class="CountryAssociation">
      <property name="country" />
      <property name="defaultCountry" />
  </composite-element>
</set>