Hibernate:单项多对一双向多对一

单项多对一

封装类:

Dept.java

public class Dept {

    private Byte deptNo;

    private String deptName;

    private String location;

}

Emp.java:

public class Emp {    

    private Integer empNo;

    private String empName;

    private Dept dept;

}


在emp.hbm.xml中用

many-to-one来映射多对一的关联关系

name:多的一端关联一的一端的属性名

class:一的一端属性对应的类名



双向多对一:

在dept封装类写了一个set集合

public class Dept {
    private int deptId;
    private String deptName;
    private Set<Emp> emp=new HashSet<Emp>();

}

在dept.hbm.xml中映射一对多的集合属性使用set节点

name:集合对应的属性名

table:set中的元素对应的记录放在哪一个数据表中,该值需要和多对一的多的表名一致

key:指定多的表中的外键列的名字


set三个属性:cascade级联、inverse反转、order-by 

懒加载load 当没有进行操作时load方法不会对数据库操作没有sql语句 但是有操作室就会有sql输出

没有操作时:

//懒加载没有sql语句
public void testLoad(){

Emp emp=(Emp)session.load(Emp.class, 1);

  }


有操作输出时:

//懒加载没有sql语句
public void testLoad(){

Emp emp=(Emp)session.load(Emp.class, 1);

//对数据库操作才会发sql
   System.out.println(emp.getEmpName());
  }

控制台:无输出

 控制台:Hibernate: 
    select
        emp0_.empId as empId1_1_0_,
        emp0_.empName as empName2_1_0_,
        emp0_.dept as dept3_1_0_ 
    from
        test_Emps emp0_ 
    where
        emp0_.empId=?
小王


get方法直接会对数据库查询并输出sql语句不管有没有输出直接查询



public void testGet(){

Emp emp=(Emp)session.get(Emp.class, 1);
 
   
  }


控制台:


Hibernate: 
    select
        emp0_.empId as empId1_1_0_,
        emp0_.empName as empName2_1_0_,
        emp0_.dept as dept3_1_0_ 
    from
        test_Emps emp0_ 
    where
        emp0_.empId=?

猜你喜欢

转载自blog.csdn.net/qq_27493313/article/details/78274580