映射多对多,需要建立一张中间表
一共三张表,一个是 Category,一个是 Item,还有一个是 Categories_Items
Categories_Items 作为中间表,其包含两个列,分别对应 CategoriyId 和 ItemId
下面附上代码:
<hibernate-mapping package="hibernate.many2many"> <class name="Category" table="CATEGORIES"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="categoryName" type="java.lang.String"> <column name="CATEGORY_NAME" /> </property> <!-- table 指定了中间表 在双向多对多映射中, 必须有一个类要设置 inverse=true, 因为如果两个表同时来维护关系的话, 可能会造成主键的冲突 --> <set name="items" table="CATEGORIES_ITEMS" inverse="false"> <!-- key items 使用什么当做key, 通过 column 指定了使用中间表中的 C_ID 这一列 --> <key> <column name="C_ID" /> </key> <!-- 通过 many-to-many 来创建多对多的映射, 其中 column 用来指定对方通过那一列的值来索引 --> <many-to-many class="Item" column="I_ID"></many-to-many> </set> </class> </hibernate-mapping>