Hibernate 建立双向多对多关联关系
来源:互联网 发布:java 适配器模式详解 编辑:程序博客网 时间:2024/06/08 12:00
在实际业务处理中,往往会存在很多复杂的数据关联关系,所以在使用 Hibernate 的时候需要掌握好,如何建立数据关联的不同关系,如单向一对多,单向多对一,单向多对多,双向一对多,双向多对多…….
现在记录学习如何在 Hibernate 中建立双向多对多的复杂关联关系:
以书店 BookStore 和书本 Book 为例子,一个书店存放很多不同类型的书,一本书可以在多家书店中存货,这样形成一种双向的多对多关系,下面来建立对应的类:
package com.wqt.POJO;
BookStore. java:
private int bookStore_id; private String bookStore_name; private Set<Book> books; ......//省略setter & getter & toString()
Book. java :
private int book_id; private String book_name; priavte Set<BookStore> bookStores; ......//省略setter & getter & toString()
在 hbm 文件中建立双向多对多的关联关系(核心部分):
BookStore.hbm.xml:
<set name="books" table="BookStore_Book" cascade="save-update"> <key column="bookStore_id"></key> <many-to-many class="com.wqt.POJO.Book"> <column name="book_id" /> </many-to-many></set>
Book.hbm.xml:
<set name="bookStore" table="BookStore_Book" cascade="save-update"> <key column="book_id"></key> <many-to-many class="com.wqt.POJO.BookStore"> <column name="bookStore_id"> </many-to-many></set>
从上面配置可以看到在 set 集合中关联到了一个 table=”BookStore_Book” ,这就是双向多对多关联关系的主要实现:通过关联表“BookStore_Book“来保存对象之间的关联关系,具体关联关系如图所示:
双向多对多关联关系表:
关联关系数据表建立完毕后,下面进行数据保存操作,并关联部分数据:
Main. java:
BookStore bs1 = new BookStore(); BookStore bs2 = new BookStore(); BookStore bs3 = new BookStore(); bs1.setBookStore_name("新华书店"); bs2.setBookStore_name("国家图书馆"); bs3.setBookStore_name("Canada Library"); Book b1 = new Book(); Book b2 = new Book(); Book b3 = new Book(); Book b4 = new Book(); Book b5 = new Book(); b1.setBook_name("Oracle"); b2.setBook_name("Sun"); b3.setBook_name("Thinking in Java"); b4.setBook_name("国家通史"); b5.setBook_name("JVM"); // 设定关联关系 // 需要先初始化容器 bs1.setBooks(new HashSet<Book>()); bs2.setBooks(new HashSet<Book>()); bs3.setBooks(new HashSet<Book>()); b1.setBookStore(new HashSet<BookStore>()); b2.setBookStore(new HashSet<BookStore>()); b3.setBookStore(new HashSet<BookStore>()); b4.setBookStore(new HashSet<BookStore>()); b5.setBookStore(new HashSet<BookStore>()); //设定关联关系 bs1.getBooks().add(b1); bs1.getBooks().add(b2); bs1.getBooks().add(b5); bs2.getBooks().add(b1); bs2.getBooks().add(b4); bs3.getBooks().add(b2); bs3.getBooks().add(b3); bs3.getBooks().add(b4); bs3.getBooks().add(b5); //保存插入到数据库中 session.save(bs1); session.save(bs2); session.save(bs3); session.save(b1); session.save(b2); session.save(b3); session.save(b4); session.save(b5);
将书店 BookStore 和书本 Book 数据关联之后,保存到数据库中即可。
此处应注意切勿重复关联数据,否则会出现主键冲突错误;关联关系的确立,只需要其中一方将关系关联好即可,关联操作实际上相当于将书店 BookStore 和 书本Book 的主键一起保存到关联表 BookStore_Book 中去,所以不能存在重复的主键数据。
如有错漏,欢迎指出。
0 0
- Hibernate 建立双向多对多关联关系
- Hibernate 建立一对多双向关联关系
- Hibernate关系映射(11)_多对多双向关联
- Hibernate -- 映射多对多双向关联关系
- 【Hibernate四】关系映射之一对多双向关联
- Hibernate建立多对一的单向关联关系
- hibernate映射一对多双向关联关系
- Hibernate:一对多双向关联关系
- Hibernate -- 一对多的双向关联关系
- Hibernate中双向一对多关联关系
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- hibernate 关联映射:多对一(一对多)双向关联关系
- jpa双向多对多关联关系
- 【HIbernate框架学习】:Hibernate对象关系映射之双向多对多关联映射
- Hibernate深入理解----04关联关系(单向多对1,双向1对多)
- Hibernate关联关系之一对多关联
- Hibernate多对多双向关联映射
- Hibernate 多对多双向关联
- HTTP与NRPC
- Android懒人框架Android annotation
- 第七周项目2建立链队算法库
- 用bootstrap写一个简洁的网页
- Android Studio插件开发实践--从创建到发布
- Hibernate 建立双向多对多关联关系
- 写给进军大数据的你们:
- MySQL聚合函数
- 【leetcode】63. Unique Paths II
- Android -- Handler消息机制简析
- C#随机函数Random()的用法
- [leetcode] Candy
- (备忘)myeclipse2014使用前的一些配置
- 第八周—鸡兔同笼