hibernate多表查询
一对多进行查询(用懒加载的模式)
查找区域所对应的街道:
Dao:
public Qu selQu(String dno){
Session session=HibernateSessionFactory.getSession();
Transaction tr=session.beginTransaction();
Qu qu=null;
try {
qu=(Qu)session.load(Qu.class, dno);
tr.commit();
} catch (Exception e) {
// TODO: handle exception
tr.rollback();
}
return qu;
}
test:
public static void getDistinct(){
Dao dao=new Dao();
String dno="bj-dc";
try {
Qu qu=dao.selQu(dno);
System.out.println(qu.getDno()+"-----"+qu.getName());
Set<Jiedao> jiedaoset=qu.getJiedaos();
for(Jiedao j:jiedaoset){
System.out.println(j.getSno()+"-----"+j.getName());
}
} catch (Exception e) {
// TODO: handle exception
}finally {
HibernateSessionFactory.closeSession();
}
}
inner join fetch查询
查找街道所对应的区域:
dao:
public List<Qu> getQu(String jName){
Session session=HibernateSessionFactory.getSession();
String hql="from Qu q inner join fetch q.jiedao j where j.name=?";
Query query=session.createQuery(hql);
query.setString(0,jName);
return query.list();
}
test:
public static void getQu(){
String str="繁荣路";
Dao dao=new Dao();
List<Qu> list=dao.getQu(str);
for(Qu u:list){
System.out.println(u.getDno()+","+u.getName());
}
HibernateSessionFactory.closeSession();
}
多对一添加数据(同时添加街道(多)和区域(一)的数据)
dao:
public void addManyToOne(Qu qu,Set<Jiedao> set){
Session session=HibernateSessionFactory.getSession();
Transaction tr=session.beginTransaction();
try {
session.save(qu);
for(Jiedao j:set){
session.save(j);
}
tr.commit();
} catch (Exception e) {
// TODO: handle exception
}
}
test:
public void addManyToOne(){
Dao dao=new Dao();
Qu qu=new Qu();
qu.setDno("ed");
qu.setName("二道区");
Jiedao jd1=new Jiedao();
jd1.setSno("ed1");
jd1.setName("二道街1");
jd1.setQu(qu);
Jiedao jd2=new Jiedao();
jd2.setSno("ed2");
jd2.setName("二道街2");
jd2.setQu(qu);
Set<Jiedao> set=new HashSet<Jiedao>();
set.add(jd1);
set.add(jd2);
dao.addManyToOne(qu, set);
}
一对多添加数据(同时添加区域(一)和街道(多)的数据)
这里的dao层与多对一相同,省略不写,只更改test:
public void addOneToMany(){
Dao dao=new Dao();
Qu qu=new Qu();
qu.setDno("ed");
qu.setName("二道区");
Jiedao jd1=new Jiedao();
jd1.setSno("ed1");
jd1.setName("二道街1");
Jiedao jd2=new Jiedao();
jd2.setSno("ed2");
jd2.setName("二道街2");
Set<Jiedao> set=new HashSet<Jiedao>();
set.add(jd1);
set.add(jd2);
qu.setJiedaos(set);
dao.addManyToOne(qu, set);
}
注意:还需要在一的XML中把inverse改成false.
inverse:表示反向,是set集合的属性。
当inverse="true" 代表关系是由多方来维护的,也就是由街道方来维护的。
当inverse="false"代表由一方来维护多关系,也就是由区域方来维护关系。
这里我们要从区域方来添加街道中的数据,所以我们把这里改成inverse="false"
多表查询(查询出所有区域对应的街道的信息)
dao:
public List<Jiedao> getAllJiedao(){
List<Jiedao> list=new ArrayList<Jiedao>();
String hql="from Jiedao j inner join j.qu";
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery(hql);
Iterator it=query.iterate();
while(it.hasNext()){
Object [] obj=(Object [])it.next();
Jiedao jiedao=(Jiedao)obj[0];
Qu qu=(Qu)obj[1];
list.add(jiedao);
}
return list;
}
test:
public void getAllJiedao(){
Dao dao=new Dao();
List<Jiedao> list=dao.getAllJiedao();
for(Jiedao j:list){
System.out.println(j.getSno()+"-----"+j.getName());
}
HibernateSessionFactory.closeSession();
}
hibernate多表查询的更多相关文章
- hibernate多表查询,结果封装在自己定义的一个实体类当中(在自己定义的类中增加构造函数)
hibernate的hql查询直接返回java对象时出现问题3 向大家请教一个问题,现在有三张表,表之间没有关联,我需要将三张表里面的所有东西查询出来存储到一个新的对象中,该如何实现,使用hibern ...
- Java面试题:Hibernate的二级缓存与Hibernate多表查询
我们来看两个有关Java框架之Hibernate的面试题,这是关于Hibernate的常考知识点. 1.请介绍一下Hibernate的二级缓存 解题按照以下思路来回答: (1)首先说清楚什么是缓存: ...
- Hibernate多表查询、查询优化策略(四)
多表HQL private static void innerJoin(){ //sql内连接 隐式内连接 select * from A,B where b.aid = a.id // 显示内连接 ...
- hibernate 多表查询
Hibernate主要支持两种查询方式:HQL查询和Criteria查询.前者应用较为广发,后者也只是调用封装好的接口. 现在有一个问题,就是实现多表连接查询,且查询结果集不与任何一个实体类对应,怎么 ...
- hibernate多表查询封装实体
以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下.最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQ ...
- Hibernate多表查询连接操作
SQL多表操作分类; 1.交叉连接:select*from t_customer cross Join t_order; 2.显示内连接: select*from t_customer c inner ...
- Hibernate 多表查询 - Criteria添加子字段查询条件 - 出错问题解决
Criteria 查询条件如果是子对象中的非主键字段会报 could not resolve property private Criteria getCriteria(Favorite favori ...
- 【Hibernate 多表查询】
HibernateManyTable public class HibernateManyTable { //演示hql左连接查询 @Test public void testSelect12() { ...
- hibernate多表查询sql,以及所得对象的处理
String sql ="SELECT id FROM tea WHERE tea.name=? "; SQLQuery query = this.getSession().cre ...
随机推荐
- 搭建两个节点的大数据集群-1.hdfs集群
0.规划 两个节点: ip 部署的程序 备注 192.168.56.2/bigdata.lzf namenode,datanode,NodeManager,hive,presto,mysql, ...
- 编程 - Python - 框架 - Django
一.Django简介 百度百科:一个开放源代码的Web框架,由Python语言编写...... 重点:一个大而全的框架,啥都替你考虑好了. 1. web框架介绍 具体介绍Django之前,必须先介绍W ...
- android xml实现animation 4种动画效果
animation有四种动画类型 分别为alpha(透明的渐变).rotate(旋转).scale(尺寸伸缩).translate(移动),二实现的分发有两种,一种是javaCode,另外一种是XML ...
- PHP-提升PHP性能的几个扩展
下面介绍的几个扩展原理都是对OPCODE进行缓存(Opcode缓存原理查看http://www.cnblogs.com/JohnABC/p/4531029.html): Zend Opcache: 由 ...
- 函数:引用file类对象及io类对象作为参数打印文本及显示文本
#include <iostream> #include <fstream> #include <cstdlib> using namespace std; voi ...
- HDU1209:Clock
参考:https://blog.csdn.net/libin56842/article/details/8990530 https://blog.csdn.net/u011479875/article ...
- Git使用之二:下载远程代码到本地指定文件夹
一.前期工作: 1.准备好本地的文件夹 2.如果后期需要继续以该文件夹进行同步的,则需要配置该文件夹,方法请参考之前的 Git使用之一:创建仓储和提交文件 二.用clone(克隆方式下载) 在本地下 ...
- torndb在python3中运用
#连接数据库:db = torndb.Connect() #查询一条的数据get() #查询多行的数据query() #创建数据表,数据库execute() #插入一条数据:sql = "i ...
- Oracle 完全理解connect by-详细脚本-可实战
狒狒Q971751392 未来星开发团队--狒狒(QQ:9715234) oracle树查询的最重要的就是select…start with…connect by…prior语法了.依托于该语法,我们 ...
- 纯js生成QRCode
纯js,不依赖jquery,非常好用,废话不多说,直接上代码! <!DOCTYPE html> <html> <head> <meta charset=&qu ...