`
it_palmer
  • 浏览: 40151 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

hibernate级联查询

    博客分类:
  • Java
 
阅读更多
今天研究了一下Hibernate的级联查询。用MyEclipse的Hibernate模式生成pojo和xml文件挺方便的,但是级联查询会导致多次查询操作,有些影响效率呀!
一、数据库表结构
1、用户组表:
]create table SXF_GROUP
(
  ID   NUMBER(10) not null,
  NAME VARCHAR2(32)
)

2、用户表
create table SXF_USERS
(
  ID      NUMBER(10) default 1 not null,
  NAME    VARCHAR2(20),
  PASSWD  VARCHAR2(15),
  GROUPID NUMBER(10)
)

二、生成的配置文件(pojo略)
<class name="teststruts2.third.pojo.SxfGroup" table="SXF_GROUP" schema="SHENGTC">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="10" scale="0" />
            <generator class="sequence" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="32" />
        </property>
        <set name="sxfUserses" inverse="true">
            <key>
                <column name="GROUPID" precision="10" scale="0" />
            </key>
            <one-to-many class="teststruts2.third.pojo.SxfUsers" />
        </set>
    </class>

<class name="teststruts2.third.pojo.SxfUsers" table="SXF_USERS" schema="SHENGTC">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="10" scale="0" />
            <generator class="sequence" />
        </id>
        <many-to-one name="sxfGroup" class="teststruts2.third.pojo.SxfGroup" fetch="select">
            <column name="GROUPID" precision="10" scale="0" />
        </many-to-one>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="20" unique="true" />
        </property>
        <property name="passwd" type="java.lang.String">
            <column name="PASSWD" length="15" />
        </property>
    </class>

三、java查询代码
//action代码
List list = userServ.queryAllUsers();
		for(Object obj : list){
			SxfUsers user2 = (SxfUsers)obj;
			System.out.println(user2.getSxfGroup().getName());
			System.out.println(user2.getSxfGroup().getId());
		}

//dao代码
Query query = this.getSession().createSQLQuery("select * from SXF_USERS").addEntity(SxfUsers.class);
			list = query.list();

四、后台日志
Hibernate: select * from SXF_USERS
Hibernate: select sxfgroup0_.ID as ID1_0_, sxfgroup0_.NAME as NAME1_0_ from SHENGTC.SXF_GROUP sxfgroup0_ where sxfgroup0_.ID=?
测试
1
Hibernate: select sxfgroup0_.ID as ID1_0_, sxfgroup0_.NAME as NAME1_0_ from SHENGTC.SXF_GROUP sxfgroup0_ where sxfgroup0_.ID=?
开发
2

发现了没有,action里每调用一次getSxfGroup()方法,就执行一次数据库查询。如果直接写原生态sql语句一条sql就搞定了。
select t1.*,t2.name groupname 
from sxf_users t1, sxf_group t2
where t1.groupid = t2.id
Hibernate的效率是不是有问题呢?
分享到:
评论
2 楼 在下是毛利小五郎 2016-07-22  
为什么要这么麻烦,你怎么不试试lazy这个属性呢
1 楼 xiuzhiye 2012-05-17  
hibernate有一二级缓存的,亲

相关推荐

    hibernate 级联查询

    "common_ssh"这个文件名可能是某种归档或项目名,与SSH(Secure Shell)协议有关,但在这个上下文中,它与Hibernate级联查询的主题没有直接联系。可能是其他项目的通用配置文件或者库,或者仅仅是上传资料时的一个...

    Hibernate的缓存级联查询

    HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,它支持多种连接查询类型,如内连接、迫切内连接、隐式内连接、左外连接、迫切左外连接、右外连接和交叉连接,提供了与SQL类似的查询功能。...

    Hibernate的级联操作(增,删,该)

    级联操作虽然方便,但也可能带来性能问题,因为它们可能会触发额外的数据库查询或更新。因此,应根据实际需求谨慎选择级联类型,避免不必要的数据库操作。另外,对于那些不需要立即更新数据库的场景,可以考虑使用...

    Hibernate级联操作一对多demo

    在这个" Hibernate级联操作一对多demo "中,我们将探讨如何在一对多的关系中应用级联操作。 一对多关系是数据库中常见的关系类型,它表示一个实体(如部门)可以有多个相关实体(如员工)。在Hibernate中,这种关系...

    hibernate级联增删改查

    本主题将深入探讨"hibernate级联增删改查",特别是针对"t_card主表"和"t_person从表"的关系。 首先,级联操作在Hibernate中是一种配置,用于指定当主表中的实体发生变化时,是否以及如何更新或删除关联的从表实体。...

    java级联查询、分页查询

    首先,级联查询在Java中通常是通过ORM(对象关系映射)框架,如Hibernate或MyBatis来实现的。级联查询允许我们在一次数据库访问中获取关联对象的数据,而无需多次单独查询。例如,假设我们有一个`User`类和一个`...

    hibernate 级联(cascade和inverse)一对多

    一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...

    3.3、Hibernate级联关系(Av839011656,P3).mp4

    3.3、Hibernate级联关系(Av839011656,P3).mp4

    hibernate many-to-many级联保存,级联更新,级联删除

    本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...

    Hibernate级联操作.docx

    在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...

    hibernate映射继承关系(每个类都对应一张表)

    5. **查询和操作**:在使用这些类进行数据操作时,Hibernate会自动处理继承关系。你可以像操作普通实体一样操作这些继承类,例如,通过Session的`save()`, `update()`, `delete()`等方法,以及`Query`或`Criteria` ...

    关于Hibernate级联删除的问题.doc

    在文档中提到的场景下,我们来详细探讨Hibernate级联删除的原理和配置方法。 首先,我们要理解关系映射中的几个关键概念。在给出的例子中,有四个表:A、AA、B和BB,它们之间存在一对多(one-to-many)和一对一...

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

    Hibernate 一对多、多对一、级联、加载、反转

    在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...

    第七章_Hibernate_-_级联策略

    第七章_Hibernate_-_级联策略 第七章

    ajax+ssh实现省份城市级联查询

    在此,我们将深入探讨Ajax、Spring、Hibernate和Struts2这四个关键技术以及它们在实现级联查询中的作用。 Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下与服务器交换数据并更新部分网页...

    用hibernate做的省市县三级级联,

    Hibernate的Session接口被用来执行SQL查询或更新,例如获取所有省份、根据省份ID获取城市等。DAO层的设计遵循了单一职责原则,使得代码更易于维护和测试。 `DwrBiz.java`可能引用了Direct Web Remoting (DWR) 框架...

    HibernateHQL级联注意事项[归类].pdf

    本文档主要讨论了使用Hibernate的HQL(Hibernate Query Language)进行级联查询时需要注意的一些事项。 1. 数据库模型 - `Employee`表:包含`id`(主键)、`empname`(员工姓名)、`empage`(员工年龄)、`context...

    Ajax+struts+hibernate实现级联菜单

    Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单

Global site tag (gtag.js) - Google Analytics