前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hibernate多表查询

hibernate多表查询

作者头像
HUC思梦
发布2020-09-03 11:18:12
8140
发布2020-09-03 11:18:12
举报
文章被收录于专栏:HUC思梦的java专栏

一对多进行查询(用懒加载的模式)

查找区域所对应的街道:

Dao:

代码语言:javascript
复制
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:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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();
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-08-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一对多进行查询(用懒加载的模式)
  • inner join fetch查询
  • 多对一添加数据(同时添加街道(多)和区域(一)的数据)
  • 一对多添加数据(同时添加区域(一)和街道(多)的数据)
  • 多表查询(查询出所有区域对应的街道的信息)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档