文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
单向 N-N 关联
N-N 关联映射增加一张表才完成基本映射。
与 1-N 映射相似,必须为 set 集合元素添加 key 子元素,指定 CATEGORIES_ITEMS 表中参照 CATEGORIES 表的外键为 CATEGORIY_ID。
与 1-N 不同的是,建立 N-N 关联时,集合中的元素使用 many-to-many。关于配置文件的属性的介绍,将在代码实现部分介绍。
域模型
关系数据模型
代码实现
实体类
public class Category {
private Integer categoryId;
private String catregoryName;
private Set<Item> items = new HashSet<Item>();
//省去 get 和 set 方法
}
public class Item {
private Integer itemId;
private String itemName;
//省去 get 和 set 方法
}
Category.hbm.xml
<hibernate-mapping package="com.lihui.hibernate.single_n_n">
<class name="Category" table="CATEGORIES">
<id name="categoryId" type="java.lang.Integer">
<column name="CATEGORY_ID" />
<generator class="native" />
</id>
<property name="catregoryName" type="java.lang.String">
<column name="CATREGORY_NAME" />
</property>
<set name="items" table="CATEGORIES_ITEMS">
<key>
<column name="C_ID"></column>
</key>
<many-to-many class="Item" column="I_ID"></many-to-many>
</set>
</class>
</hibernate-mapping>
- table:指定中间表
- many-to-many:指定多对多的关联关系
- column:执行 set 集合中的持久化类在中间表的外键列的名称
Item.hbm.xml
<hibernate-mapping package="com.lihui.hibernate.single_n_n">
<class name="Item" table="ITEMS">
<id name="itemId" type="java.lang.Integer">
<column name="ITEM_ID" />
<generator class="native" />
</id>
<property name="itemName" type="java.lang.String">
<column name="ITEM_NAME" />
</property>
</class>
</hibernate-mapping>
Junit
@Test
public void testSave() {
Category c1 = new Category();
c1.setCatregoryName("C-AA");
Category c2 = new Category();
c2.setCatregoryName("C-BB");
Item i1 = new Item();
i1.setItemName("I-AA");
Item i2 = new Item();
i2.setItemName("I-BB");
c1.getItems().add(i1);
c1.getItems().add(i2);
c2.getItems().add(i1);
c2.getItems().add(i2);
session.save(c1);
session.save(c2);
session.save(i1);
session.save(i2);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论