15 多对一关联关系的检索与原理分析
来源:互联网 发布:超级碧业生 知乎 编辑:程序博客网 时间:2024/06/06 05:22
查询
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;
idnamedepart_id1emp name 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;
idnamedepart_id1emp name 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{
}
}
------------------------------------------------
以上从保存和查询两方面学习了多对一关联
多对一关联是用得最多的关联
也是最简单的关联。
0 0
- 15 多对一关联关系的检索与原理分析
- hibernate多对一关联关系的映射与原理分析
- 14 多对一关联关系的映射与原理分析
- 多对一和一对一关联的检索策略
- 多对一关联关系
- 一对多与多对一关联关系
- 多对一单向关联关系理解与实践
- Hibernate一对多、多对一关联关系的使用
- 关联映射的关系(多对一)
- Hibernate中关联关系:多对一的学习
- Hibernate建立多对一的单向关联关系
- hibernate中的多对一关联关系
- hibernate中的多对一关联关系
- Hibernate注解多对一关联关系
- 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及添加、查询
- 四、Hibernate多对一关联有关系(单向关联)
- Hibernate关联关系映射(多对一关联映射)
- Hibernate学习笔记11--组件关联关系的映射与原理分析
- MyEclipse修改默认的jsp模板页pageEncoding为UTF-8
- 排序二叉树
- Linux常用命令--解压缩
- Android ActionBar 兼容2.x注意细节
- 什么是REST架构
- 15 多对一关联关系的检索与原理分析
- 基于Gridster的用户个性化导航栏布局
- 为啥REST如此重要?
- 从NCBI批量获取一个物种EST等相关序列
- 未来十年,互联网将如何颠覆17个传统行业
- 基于REST架构的Web Service设计
- Linux安全性和netfilter/iptables介绍
- temp
- 学习angular ui-router - 管理状态