基于List集合映射

1、 实体类中使用List集合

1 public class Grade {
2     private int id;
3     private String name;
4     private List<Student> students = new ArrayList<Student>(0);
5 }

2、 映射文件

 1 <hibernate-mapping package="cn.siggy.pojo">
 2     <class name="Grade">
 3         <id name="id">
 4             <generator class="native"></generator>
 5         </id>
 6         <property name="name"/>
 7         <list name="students" cascade="all">
 8             <!-- key表示外键  column外键列名-->
 9             <key column="grade_id"></key>
10             <!-- 在多的一端 产生一列 用来表示顺序 如果不指明列名 默认为 idx
11                 值由hibernate来维护
12              -->
13             <list-index column="sort">
14             </list-index>
15             <!-- one-to-many 一对多  类Grade 中  students 所表示类型 -->
16             <one-to-many class="Student"/>
17         </list>
18     </class>

3、 测试代码

 1 @Test
 2     public void testSave() throws HibernateException, SerialException, SQLException{
 3         Configuration cfg = new Configuration().configure();
 4         SessionFactory factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
 5         .applySettings(cfg.getProperties()).build());
 6         Session session = null;
 7         Transaction tx = null;
 8         try{
 9             session = factory.openSession();
10             tx = session.beginTransaction();
11             Grade grade = new Grade();
12             grade.setName("基础");
13
14             Student stu = new Student();
15             stu.setName("张三疯");
16             stu.setAge(22);
17             Student stu1 = new Student();
18             stu1.setName("老王");
19             stu1.setAge(23);
20             Student stu2 = new Student();
21             stu2.setName("老李");
22             stu2.setAge(23);
23             //关联
24             grade.getStudents().add(stu);
25             grade.getStudents().add(stu1);
26             grade.getStudents().add(stu2);
27             //保存数据的顺序 是根据外键的配置来决定的
28             //如果外键不能为null,那么先保存一的一端
29             //如果外键可以为null,则可以随意保存
30             session.save(grade);
31             session.save(stu);
32             session.save(stu1);
33             session.save(stu2);
34
35             tx.commit();
36
37         }catch (HibernateException e) {
38             if(tx!=null)
39                 tx.rollback();
40             e.printStackTrace();
41             throw e;
42         }finally{
43             HibernateUtil.closeSession();
44         }
45     }
46     @Test
47     public void testGet(){
48         Session session = null;
49         Transaction tx = null;
50         try{
51             session = HibernateUtil.getSession();
52             tx = session.beginTransaction();
53             //取数据
54             Grade grade = (Grade)session.get(Grade.class, 1);
55             System.out.println("gradeName="+grade.getName());
56             System.out.println("grade所对应的多的一端的数据");
57             List<Student> list = grade.getStudents();
58             for(Student stu:list){
59                 System.out.println(stu.getName());
60             }
61             tx.commit();
62         }catch (HibernateException e) {
63             if(tx!=null)
64                 tx.rollback();
65             e.printStackTrace();
66             throw e;
67         }finally{
68             HibernateUtil.closeSession();
69         }
70     }
时间: 2024-11-10 16:46:46

基于List集合映射的相关文章

NHibernate3剖析:Mapping篇之集合映射基础(3):List映射

系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种应用程序的集成,基于NHibernte3.0版本号. 假设你还不熟悉NHibernate.能够高速阅读NHibernate之旅系列文章导航系列入门,假设你已经在用NHibernate了,那么请跟上NHibernate3.0剖析系列吧. NHibernate专题:http://kb.cnblogs.c

NHibernate3剖析:Mapping篇之集合映射基础(4):Map映射

系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种应用程序的集成,基于NHibernte3.0版本.如果你还不熟悉NHibernate,可以快速阅读NHibernate之旅系列文章导航系列入门,如果你已经在用NHibernate了,那么请跟上NHibernate3.0剖析系列吧. NHibernate专题:http://kb.cnblogs.com

NHibernate3剖析:Mapping篇之集合映射基础(2):Bag映射

系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种应用程序的集成,基于NHibernte3.0版本.如果你还不熟悉NHibernate,可以快速阅读NHibernate之旅系列文章导航系列入门,如果你已经在用NHibernate了,那么请跟上NHibernate3.0剖析系列吧. NHibernate专题:http://kb.cnblogs.com

Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set<String> address; private List<String> addressList = new ArrayList<String>(); //private Str

hibernate中Set集合映射

set集合映射三要素(从javabean映射到数据 ORM)) 1,集合表(外键表,子表)名称 2.,指定集合表外键<key column=""> 3.集合表其他元素<element type="" column=""> <set name="addressSet" table="user_addressSet" order-by="address ASC"

hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化类的主键生成主键的实体的映射文件 首先需要指定主键生成方式为foreigner 格式为: <id name="departmentId" type="java.lang.Integer"> <column name="department_i

hibernate 集合映射之有序集合

hibernate 有时候会出现集合映射的情况,一般One-to-many的时候会用到.主要形式为: model: public class TestPerson {       private Long pid;       private String pname;       private String age;       private Set<TestRole> testRole = new HashSet<TestRole>(); -------get() set(

(05)String类型的集合映射

基本的需求是:用户购买东西,有多个地址. 这篇文章关注的是String类型的Set.List和Map数据如何与数据库中的表建立映射关系,在下一篇文章中,会String类型进一步修改为用户自定义的类型.这篇文章的重点是学习.hbm.xml中映射的写法. User.java package com.rk.hibernate.f_collections; import java.util.List; import java.util.Map; import java.util.Set; public 

NHibernate 集合映射深入 (第五篇) &lt;set&gt;,&lt;list&gt;,&lt;map&gt;,&lt;bag&gt;

NHibernate 集合映射深入 (第五篇) <set>,<list>,<map>,<bag> 一.集合外键 在NHibernate中,典型的用于映射集合类的元素有<set>,<list>,<map>,<bag>,<array>,<primitive-array>. 我们回到上一篇,集合映射基础当中的一对多查询.对于集合类型: public virtual ISet<Person