疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

学习hibernate笔记关系篇


 

 
多对一关系
 
Category实体类
 
一个Product对应一个Category 
一个Category对应多个Product
 
Product和Category是多对一的关系
 
public class Category {
    int id;
    String name;
 
}
 
Category.hbm.xml
 
<!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.pojo">
    <class name="Category" table="category_">
        <id name="id" column="id">
            <generator class="native">
            </generator>
        </id>
        <property name="name"></property>
    </class>
</hibernate-mapping>
 
在Product实体类中增加Category属性
 
Category category;
1
在Product.hbm.xml中设置Category多对一关系
 
使用many-to-one 标签设置多对一关系 
name=”category” 对应Product类中的category属性 
class=”Category” 表示对应Category类 
column=”cid” 表示指向 category_表的外键
<many-to-one name="category" class="Category" column="cid"></many-to-one>
1
在hibernate.cfg.xml增加Category的映射
 
<mapping resource="com/pojo/Category.hbm.xml"/>
1
测试many-to-one
 
Category c = new Category();
        c.setName("c1");
        s.save(c);
 
        Product p = (Product) s.get(Product.class, 5);
        p.setCategory(c);
        s.update(p);
 
category_ 表可以自动生成
 
一对多
 
Category和Product是一对多的关系
 
Category实体类加set集合
 
Set<Product> products;
Category.hbm.xml增加one-to-many映射
 
<!-- set用于设置一对多关系,或用list,name="products" 对应Category类中的products属性 lazy="false"表示不使用加载延时 -->
        <set name="products" lazy="false">
            <!-- 表示外检是cid,可以为空 -->
            <key column="cid" not-null="false"></key>
            <!-- 表示一对多的类是Product -->
            <one-to-many class="Product" />
        </set>
 
TestHibernate测试one-to-many关系
 
Category c=(Category) s.get(Category.class, 2);
        Set<Product> ps=c.getProducts();
        System.out.println();
        for (Product product : ps) {
            System.out.println(product.getName());
        }