查询
public static main(String[] args){
Department depart=add();
Employee emp=query(1);
}
static Employee query(int empId){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Employee emp=(Employee)s.get(Employee.class,empId);
System.out.println("depart name"+emp.getDepartment.getName());
//看能不能取出部门的信息,这是我们关心的。
tx.commit();
return emp;
}finally{
}
}
------------------------------------------------
System.out.println("depart name"+emp.getDepartment.getName());
//看能不能取出部门的信息,这是我们关心的。
------------------------------------------------
输出结果: Hibernate: insert into Department(name) values(?)
Hibernate: insert into Employee(name,depart_id) values(?,?)
Hibernate: select employee0_.id as2_0_,employe...
Hiberante: select department0_.id as id1_0_,department0_.name as ...
depart name:depart name
分析:
首先:select * from employee where id=1;
然后:select * from department where id='
depart_id'
------------------------------------------------
如果将System.out.println("depart name"+emp.getDepartment.getName());
改变位置如下,那么这段代码就运行不起来了!
public static main(String[] args){
Department depart=add();
Employee emp=query(1);
System.out.println("depart name"+emp.getDepartment.getName());
}
static Employee query(int empId){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Employee emp=(Employee)s.get(Employee.class,empId);
// System.out.println("depart name"+emp.getDepartment.getName());
//看能不能取出部门的信息,这是我们关心的。
tx.commit();
return emp;
}finally{
}
}
将会报错: could not initialize proxy-no Session
这属于懒加载的细节。
------------------------------------------------
解决该问题的话,可以通过初始化代理
public static main(String[] args){
Department depart=add();
Employee emp=query(1);
System.out.println("depart name"+emp.getDepartment.getName());
}
static Employee query(int empId){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Employee emp=(Employee)s.get(Employee.class,empId);
Hibernate.initialize(emp.getDepart());//初始化代理
tx.commit();
return emp;
}finally{
}
}
------------------------------------------------
以上从保存和查询两方面学习了多对一关联
多对一关联是用得最多的关联
也是最简单的关联。
public static main(String[] args){
Department depart=add();
Employee emp=query(1);
}
static Employee query(int empId){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Employee emp=(Employee)s.get(Employee.class,empId);
System.out.println("depart name"+emp.getDepartment.getName());
//看能不能取出部门的信息,这是我们关心的。
tx.commit();
return emp;
}finally{
}
}
------------------------------------------------
System.out.println("depart name"+emp.getDepartment.getName());
//看能不能取出部门的信息,这是我们关心的。
------------------------------------------------
输出结果: Hibernate: insert into Department(name) values(?)
Hibernate: insert into Employee(name,depart_id) values(?,?)
Hibernate: select employee0_.id as2_0_,employe...
Hiberante: select department0_.id as id1_0_,department0_.name as ...
depart name:depart name
分析:
首先:select * from employee where id=1;
id | name | depart_id |
1 | emp name | 1 |
------------------------------------------------
如果将System.out.println("depart name"+emp.getDepartment.getName());
改变位置如下,那么这段代码就运行不起来了!
public static main(String[] args){
Department depart=add();
Employee emp=query(1);
System.out.println("depart name"+emp.getDepartment.getName());
}
static Employee query(int empId){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Employee emp=(Employee)s.get(Employee.class,empId);
// System.out.println("depart name"+emp.getDepartment.getName());
//看能不能取出部门的信息,这是我们关心的。
tx.commit();
return emp;
}finally{
}
}
将会报错: could not initialize proxy-no Session
这属于懒加载的细节。
------------------------------------------------
解决该问题的话,可以通过初始化代理
public static main(String[] args){
Department depart=add();
Employee emp=query(1);
System.out.println("depart name"+emp.getDepartment.getName());
}
static Employee query(int empId){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Employee emp=(Employee)s.get(Employee.class,empId);
Hibernate.initialize(emp.getDepart());//初始化代理
tx.commit();
return emp;
}finally{
}
}
------------------------------------------------
以上从保存和查询两方面学习了多对一关联
多对一关联是用得最多的关联
也是最简单的关联。