本来一对多映射可以和多对一映射放在一块,上篇贴有代码显得太长就分开写吧,这样看起来更清晰。
一对多映射的配置文件
<set name="Product" lazy="false">
<key column="cid" not-null="false">
<one-to-many class="com.vipcpi.Product">
</set>
配置文件解释
set用于设置一对多、多对多的关系,
1.其中name=“products”对应的是Category类中的属性products,
lazy设置的是是否使用延迟加载
2.key项标识外键是cid,false标识可以为空
3.one-to-many表示一对多所对应的类是Product类,注意:这块也是要指定的是类的路径所在,不是单独的一个类名,要不Product和Category不在一个包中就没法找到对应的类。
测试代码:
package com.vipcpi.category;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.vipcpi.Product;
public class CheckManyToOne {
public static void main(String[] args) {
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session s=sf.openSession();
s.beginTransaction();
//获取id为1的数据
Category cate=(Category) s.get(Category.class, 1);
Set<Product> ps=cate.getProducts();
for(Product p:ps){
System.out.println(p.getName());
}
s.getTransaction().commit();
s.close();
sf.close();
}
}