学习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;
在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>
在hibernate.cfg.xml增加Category的映射
<mapping resource="com/pojo/Category.hbm.xml"/>
测试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());
        }
posted @ 2018-01-24 20:57  小沐酱  阅读(95)  评论(0编辑  收藏  举报