用HIbernate的两个查询的区别?

来源:百度知道 编辑:UC知道 时间:2024/06/23 22:41:07
/**
* 根据投诉编号查询
*/
public LodgeTreat findByLodgeId(final String lodgeId)
{
return (LodgeTreat) getHibernateTemplate().execute(
new HibernateCallback()
{

public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
return session.createQuery(
"from LodgeTreat as l where l.lodgeId=?")
.setParameter(0, lodgeId).uniqueResult();
}

});
}

/**
* 主键查询投诉信息
*/
public LodgeTreat findByPK(Integer guid)
{
return (LodgeTreat) getHibernateTemplate().get(LodgeTreat.class, guid);
}

这个两个查询的区别是什么啊?
都什么时候用?

上面一个是回调hibernate的查询方式

下面一个是用spring里的Template模板,由spring托管的hibernate查询。

结果没区别(个人认为)

================

上面那种写法的使用:比如原来程序只用了hibernate没用spring,现在要改成要用spring的,可以用原来的hibernate语句

下面的用法:新写的spring框架程序

以上个人意见,如有错误欢迎指正

根据主键查询(getHibernateTemplate().get()),Hibernate会自动把查询到得实体中的Set或实体赋值(XML也要做配置)

session.createQuery()查询只会把基本的字段赋值假如有键的链接,里面的Set或实体是不会赋值的

上面uniqueResult();返回的是一个Object类型的对象,你这里返回的对象,可以转换为LodgeTreat类型
主要用于查询单条数据

而下面get(LodgeTreat.class, guid);返回的是一个List<Object>你这里返回的东西,可以转换为List<LodgeTreat>
这里的guid是主键,根据guid这个主键,查找LodgeTreat类所对应的表的数据