hibernate关联映射阐述一对多与多对一

1、多对一

              在多的一端增加外键、创建实体类时,在多方创建私有变量一方的对象

       <many-to-onename="depart" column="depart_id" foreign-key=""not-null="true" />

       foreign-key如果缺省,则代表外键为其他表的主键。 不缺省则可以指定字段

              插入操作:

                     Departmentdep = new Department();

                     dep.setName("departone");

 

                     Employeee1 = new Employee();

                     e1.setName("Tom");

                     e1.setDepart(dep);

                     s.save(dep);

                     s.save(e1);

                     tx.commit();

                     如果先保存Employee对象,则系统先将depart_id默认为null,执行完保存dep,它就会自动修改同步departe_id

              查询操作:

                     s=HibernateUtil.getSession();

                     Employeee=(Employee) s.get(Employee.class, empId);

                     System.out.println(e.getName()+"\t"+e.getDepart().getName());  //执行懒加载

                     returne;

                     对于查询Employee对象,则第一个使用方法的查询,则查询到外键的时,系统则采用懒加载技术,如果放在方法外,则会抛异常,因为session已经被释放,无法执行懒加载的查询

       2、一对多

              <propertyname="name" column="name"/>

              <setname="emps">

              <!--指定员工表中外键的列名  -->

              <keycolumn="depart_id"></key>

              <!--子标签在告诉这个集合表示一对多的关系并用class指定集合存放的对象类型-->

              <one-to-manyclass="Employee" />

              </set>

                     Departmentdep = new Department();

                     dep.setName("departone");

 

                     Employeee1 = new Employee();

                     Employeee2=new Employee();

                     e2.setName("marico");

                     e2.setDepart(dep);  //建立了关联

                     e1.setName("Tom");

                     e1.setDepart(dep);

                     s.save(dep);

                     s.save(e1);

                     s.save(e2);

                     //也可以建立关联,此时系统自动调用update方法来执行更新                  

                     Set<Employee>set=new HashSet<Employee>();

                     set.add(e1);

                     set.add(e2);

                     dep.setEmps(set);

                     s.save(dep);

 

                     Departmentd=(Department) s.get(Department.class, depId);

                     System.out.println(d.getName()+"\t"+d.getEmps().size());

3、如果同时实现一对多和多对一的操作,则可成为双向关联。双向关联可以由在其中的任何一个对象得到另一个关联的对象。在一方和多方都可以实现。

       如果没有同时则称之为单向关联,在一对多情况下。在一方可以得到多方。在多对一同理。例如学生和老师:   如果实现一对多关系。 则

单向,

一对多:老师-----à学生  可以从老师对象中得到它的学生。  

多对一:学生-----à老师  可以从学生对象中得到他的老师。

双向:

  可以从老师对象中得到它的学生。也可以从学生对象中得到老师的对象。

你可能感兴趣的:(Hibernate,session,null,Class)