Hibernate:
select
spring0_.id
as
col_0_0_
from
spring spring0_
where
spring0_.username
=
?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as id0_0_, spring0_.username as username0_0_, spring0_.password as password0_0_ from spring spring0_ where spring0_.id = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as id0_0_, spring0_.username as username0_0_, spring0_.password as password0_0_ from spring spring0_ where spring0_.id = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as id0_0_, spring0_.username as username0_0_, spring0_.password as password0_0_ from spring spring0_ where spring0_.id = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as id0_0_, spring0_.username as username0_0_, spring0_.password as password0_0_ from spring spring0_ where spring0_.id = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as id0_0_, spring0_.username as username0_0_, spring0_.password as password0_0_ from spring spring0_ where spring0_.id = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as id0_0_, spring0_.username as username0_0_, spring0_.password as password0_0_ from spring spring0_ where spring0_.id = ?
其中我只用了一次向数据库查询数据怎么这一句
Hibernate: select spring0_.id as col_0_0_ from spring spring0_ where spring0_.username=?
要执行两此
其中查询是在spring的validator中中进行的事物管理使用spring的声明式事物管理
Spring DBuser = udao.getUserByName(user.getUsername());
而getUserByName()的定义如下
public
class
SpringDaoImpl
extends
HibernateDaoSupport
implements
SpringDao
{
public Spring getUserByName(String name) {
Session session = this.getSession();
Query q = session.createQuery("from Spring s where s.username=?");
q.setString(0, name);
Spring user = null;
if(q.iterate().hasNext())
{
user = (Spring) q.iterate().next();
}
return user;
}
}
public Spring getUserByName(String name) {
Session session = this.getSession();
Query q = session.createQuery("from Spring s where s.username=?");
q.setString(0, name);
Spring user = null;
if(q.iterate().hasNext())
{
user = (Spring) q.iterate().next();
}
return user;
}
}
而现在我有试着重新把这个方法再定义下,其改后如下
public
Spring getUserByName(String name)
{
List list = this.getHibernateTemplate().findByNamedParam(
"from Spring s where s.username=:name", "name", name);
Iterator it = list.iterator();
Spring user = null;
if (it.hasNext()) {
user = (Spring) it.next();
}
return user;
}
List list = this.getHibernateTemplate().findByNamedParam(
"from Spring s where s.username=:name", "name", name);
Iterator it = list.iterator();
Spring user = null;
if (it.hasNext()) {
user = (Spring) it.next();
}
return user;
}
这时我重新运行这个web程序 看下运行的结果,却发现这时没有hibernate所说的lazy-load(懒集合),而是直接从database里把所有的数据加进来
其运行两次的结果如下:
Hibernate:
select
spring0_.id
as
id0_, spring0_.username
as
username0_, spring0_.password
as
password0_
from
spring spring0_
where
spring0_.username
=
?
Hibernate: select spring0_.id as id0_, spring0_.username as username0_, spring0_.password as password0_ from spring spring0_ where spring0_.username = ?
Hibernate: select spring0_.id as id0_, spring0_.username as username0_, spring0_.password as password0_ from spring spring0_ where spring0_.username = ?
这是否就意味着没有使用到hibernate提供的性能优化的功能呢?或者这背后还有更多的考虑呢?真是迷惑啊,还请各位指点。