您的位置:首页 > 其它

Hibernate 关联关系映射(多对多关联)

2014-07-24 15:59 267 查看
多对多的关联关系都是基于表实现的。

如果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();
}


显示结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: