一、多对一(Product-Category)
1、创一个Product对应一个Category
一个Category对应多个Produc
2、为Product增加Category属性
3、Product.hbm.xml中设置Category的多对一关系(在多的一方配置)
<many-to-one name="category" class="Category" column="cid"/>
4、编写测试类,新建category,设置id为4的product,为该category
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Category category = new Category();
category.setName("c1 手机");
session.save(category);
Product product = (Product) session.get(Product.class,4);
product.setCategory(category);
session.update(product);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
二、一对多(Category-Product)
1、为Category新增一个Product类型的Set集合
private Set<Product> products;
2、Category.hbm.xml增加一对多关系配置
<set name="products" lazy="false">
<key column="cid" not-null="false"/>
<one-to-many class="Product"/> </set>
3、编写测试类,获取所有类型id为2的product
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Category category = new Category();
category.setName("c1 手机");
session.save(category);
Product product = (Product) session.get(Product.class,4);
product.setCategory(category);
session.update(product);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
三、多对多(Product-User)
实现多对多关系,必须有一张中间表,维护关系
1、创建User,提供set/get
public class User {
int id;
String name;
Set<Product> products;
}
2、创建User映射文件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.cex.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>
3、Product增加User集合
Set<User> users;
4、Product.hbm.xml增加多对多配置
<set name="users" table="user_product" lazy="false">
<key column="pid"/>
<many-to-many column="uid" class="User"/>
</set>
5、hibernate.cfg.xml增加User的映射文件
<mapping resource="com/how2java/pojo/User.hbm.xml" />
6、测试类中,创建多对多关系
产品5,被用户1、2、3购买
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Set<User> users = new HashSet<User>();
for(int i=0; i<3; i++){
User u = new User();
u.setName("user"+i);
users.add(u);
session.save(u);
}
Product product = (Product) session.get(Product.class,5);
product.setUsers(users);
session.update(product);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}