返回介绍

单向 N-N 关联

发布于 2025-01-04 01:27:29 字数 2913 浏览 0 评论 0 收藏 0

N-N 关联映射增加一张表才完成基本映射。

与 1-N 映射相似,必须为 set 集合元素添加 key 子元素,指定 CATEGORIES_ITEMS 表中参照 CATEGORIES 表的外键为 CATEGORIY_ID。

与 1-N 不同的是,建立 N-N 关联时,集合中的元素使用 many-to-many。关于配置文件的属性的介绍,将在代码实现部分介绍。

域模型

图 1

关系数据模型

图 2

代码实现

实体类

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文