学习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());
}