hibernate级联查询

今天研究了一下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的效率是不是有问题呢?
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值