0、目录
1、实现多对多2、User.java3、User.hbm.xml4、Product.java5、Product.hbm.xml6、在hibernate.cfg.xml中增加User的映射7、TestHibernate 测试many-to-many关系8、参考链接
1、实现多对多
一种Product可以被多个User购买 一个User可以购买多种Product
所以Product和User之间的关系是多对多 many-to-many 要实现多对多关系,必须有一张中间表 user_product 用于维护 User和Product之间的关系
2、User.java
package com.how2java.pojo
;
import java.util.Set
;
public class User {
int id
;
String name
;
Set<Product> products
;
public int getId() {
return id
;
}
public void setId(int id) {
this.id = id
;
}
public String getName() {
return name
;
}
public void setName(String name) {
this.name = name
;
}
public Set<Product> getProducts() {
return products
;
}
public void setProducts(Set<Product> products) {
this.products = products
;
}
}
3、User.hbm.xml
<?xml version=
"1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package=
"com.how2java.pojo">
<class name=
"User" table=
"user_">
<id name=
"id" column=
"id">
<generator class=
"native">
</generator>
</id>
<property name=
"name" />
<set name=
"products" table=
"user_product" lazy=
"false">
<key column=
"uid" />
<many-to-many column=
"pid" class=
"Product" />
</set>
</class>
</hibernate-mapping>
4、Product.java
增加了对应Users的集合
package com.how2java.pojo
;
import java.util.Set
;
public class Product {
int id
;
String name
;
float price
;
Category category
;
Set<User> users
;
public Set<User> getUsers() {
return users
;
}
public void setUsers(Set<User> users) {
this.users = users
;
}
public Category getCategory() {
return category
;
}
public void setCategory(Category category) {
this.category = category
;
}
public int getId() {
return id
;
}
public void setId(int id) {
this.id = id
;
}
public String getName() {
return name
;
}
public void setName(String name) {
this.name = name
;
}
public float getPrice() {
return price
;
}
public void setPrice(float price) {
this.price = price
;
}
}
5、Product.hbm.xml
<?xml version=
"1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package=
"com.how2java.pojo">
<class name=
"Product" table=
"product_">
<id name=
"id" column=
"id">
<generator class=
"native">
</generator>
</id>
<property name=
"name" />
<property name=
"price" />
<many-to-one name=
"category" class=
"Category" column=
"cid" />
<set name=
"users" table=
"user_product" lazy=
"false">
<key column=
"pid" />
<many-to-many column=
"uid" class=
"User" />
</set>
</class>
</hibernate-mapping>
6、在hibernate.cfg.xml中增加User的映射
<?xml version=
'1.0' encoding=
'utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name=
"connection.driver_class">com.mysql.jdbc.Driver</property>
<property name=
"connection.url">
jdbc:mysql://
localhost:3306/test?characterEncoding=GBK</property>
<property name=
"connection.username">root</property>
<property name=
"connection.password">admin</property>
<!-- SQL dialect -->
<property name=
"dialect">org.hibernate.dialect.MySQLDialect</property>
<property name=
"current_session_context_class">thread</property>
<property name=
"show_sql">true</property>
<property name=
"hbm2ddl.auto">update</property>
<mapping resource=
"com/how2java/pojo/Product.hbm.xml" />
<mapping resource=
"com/how2java/pojo/Category.hbm.xml" />
<mapping resource=
"com/how2java/pojo/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
7、TestHibernate 测试many-to-many关系
首先增加3个用户 然后演示产品1被用户1,2,3购买
package com.how2java.test
;
import java.util.HashSet
;
import java.util.Set
;
import org.hibernate.Session
;
import org.hibernate.SessionFactory
;
import org.hibernate.cfg.Configuration
;
import com.how2java.pojo.Product
;
import com.how2java.pojo.User
;
public class TestHibernate {
public static void main(String[] args) {
SessionFactory sf = new
Configuration().
configure().
buildSessionFactory();
Session s = sf.
openSession();
s.
beginTransaction();
//增加3个用户
Set<User> users = new
HashSet();
for
(int i = 0
; i < 3
; i++) {
User u =new
User();
u.
setName("user"+i
);
users.
add(u
);
s.
save(u
);
}
//产品1被用户1,2,3购买
Product p1 =
(Product
) s.
get(Product.class, 1
);
p1.
setUsers(users
);
s.
save(p1
);
s.
getTransaction().
commit();
s.
close();
sf.
close();
}
}
8、参考链接
[01] How2j - Hibernate - 关系 - 实现多对多