Hibernate 关联关系映射(多对多关联)
2014-07-24 15:59
267 查看
多对多的关联关系都是基于表实现的。
如果A类的实例关联多个B类的实例,而同时B类的实例也关联多个A类的实例,那么A和B就是双向的多对多关联关系。
A类和B类的演示代码如下:
Category类
Items类
Category.hbm.xml
Item.hbm.xml
映射文件hibernate.cfg.xml
测试类:
显示结果:
如果A类的实例关联多个B类的实例,而同时B类的实例也关联多个A类的实例,那么A和B就是双向的多对多关联关系。
A类和B类的演示代码如下:
public class A{ //A类其他属性 ... //存储B类对象的集合 private Set bs = new HashSet(); } public class B{ //B类其他属性 ... //存储A类对象的集合 private Set as = new HashSet(); }创建表:
create table category( id int not null primary key, name varchar(20) ); create table items( id int not null primary key, name varchar(20), price double ); create table category_item( category_id integer, item_id integer, primary key(category_id,item_id) ); alter table category_item add constraint foreign key(category_id) references category(id); alter table category_item add constraint foreign key(item_id) references items(id);
Category类
package manytomany; import java.util.HashSet; import java.util.Set; public class Category { private Integer id; private String name; private Set itemses = new HashSet(0); public Category() { } public Category(Integer id) { super(); this.id = id; } public Category(Integer id, String name) { super(); this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getItemses() { return itemses; } public void setItemses(Set itemses) { this.itemses = itemses; } }
Items类
package manytomany; import java.util.HashSet; import java.util.Set; public class Items { private Integer id; private String name; private Double price; private Set categories = new HashSet(0); public Items() { } public Items(Integer id) { super(); this.id = id; } public Items(Integer id, String name, Double price) { super(); this.id = id; this.name = name; this.price = price; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Set getCategories() { return categories; } public void setCategories(Set categories) { this.categories = categories; } }
Category.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="manytomany.Category" table ="category" catalog="mldn"> <id name="id" type ="java.lang.Integer"> <column name="id"/> <generator class ="assigned"/> </id> <property name="name" type ="java.lang.String"> <column name="name" length="20" /> </property> <set name ="itemses" cascade="all" table="category_item"> <key> <column name="category_id" not-null="true"/> </key> <many-to-many column="item_id" class="manytomany.Items"/> </set> </class> </hibernate-mapping>
Item.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="manytomany.Items" table ="items" catalog="mldn"> <id name="id" type ="java.lang.Integer"> <column name="id"/> <generator class ="assigned"/> </id> <property name="name" type ="java.lang.String"> <column name="name" length="20" /> </property> <property name="price" type ="java.lang.Double"> <column name="price" precision="22" scale="0"/> </property> <set name ="categories" table="category_item"> <key> <column name="item_id" not-null="true"/> </key> <many-to-many column="category_id" class="manytomany.Category"/> </set> </class> </hibernate-mapping>
映射文件hibernate.cfg.xml
<mapping resource="manytomany/Category.hbm.xml" /> <mapping resource="manytomany/Items.hbm.xml" />
测试类:
public static void main(String[] args) { Category c1 = new Category(1,"childbook"); Category c2 = new Category(2,"novel"); Items item1 = new Items(100,"Happy duck",20.9); Items item2 = new Items(101,"Fate",13.9); Items item3 = new Items(102,"Love tree",30.5); c1.getItemses().add(item1); c1.getItemses().add(item3); c2.getItemses().add(item1); c2.getItemses().add(item2); Session session = HibernateSessionFactory.getSession(); Transaction tran = session.beginTransaction(); session.save(c1); session.save(c2); tran.commit(); }
显示结果:
相关文章推荐
- Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
- Hibernate_映射_关联关系_cascade属性、单向关联
- Hibernate 关联关系映射 -单向关联
- hibernate 关联映射:多对一(一对多)双向关联关系
- Hibernate 关联关系映射 -双向关联
- Hibernate关联关系映射(多对一关联映射)
- Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
- Hibernate的关联映射---6.1.9: 基于复合主键的关联关系
- Hibernate关联关系映射之一对一(主键关联)
- Hibernate关联关系映射(一对一关联)
- 【Hibernate】--关联关系映射:一对一关联
- Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
- Hibernate映射一对多双向关联关系及部门关联属性
- Hibernate映射详解(五)--多对多关联映射 .
- Hibernate 、继承关联映射
- Hibernate框架之关联映射入门
- Java乔晓松-Hibernate关联映射
- Hibernate(五)——经典解析一对一关联映射
- (四)hibernate关联映射之——一对多映射
- Hibernate从入门到精通(六)一对一双向关联映射