hibernate的sql查询出来封装实体的两种方式
2017-03-22 14:21
411 查看
1.在用hibernate的查询数据库时,即可以用hql,也可以用sql语句至于用hql语句查出来的结果可以是一个实体对象
如:
2.在使用sql语句时,查询出来后要转换一下,可以自己转成与数据库对应的hibernate的映射对象,也可以是dto,如果是hibernate的映射文件对应的直接加入
后来又发现另一种使用方式:
public List<Researcher> getPublicResearcherForHot(int rowStart,
int numberOfResultsToShow) {
String sql = "select * from ir_researcher.researcher as re "
+ " where re.researcher_id in (select t.researcher_id from "
+ " (select r.researcher_id,count(*) as num from "
+ " ir_researcher.researcher_subscription as r "
+ " group by r.researcher_id ORDER BY num desc)as t)";
// Query query = hbCrudDAO.getSessionFactory().getCurrentSession().createQuery(hql);
Query query = hbCrudDAO.getSessionFactory().getCurrentSession().createSQLQuery(sql)
.addEntity("re",Researcher.class);
query.setFirstResult(rowStart);
query.setMaxResults(numberOfResultsToShow);
return query.list();
}
如:
public List<CraGovernment> getAll() { String sql = "from CraGovernment as o"; Query query = sessionFactory.getCurrentSession().createQuery(sql); return query.list(); }
2.在使用sql语句时,查询出来后要转换一下,可以自己转成与数据库对应的hibernate的映射对象,也可以是dto,如果是hibernate的映射文件对应的直接加入
addEntity(GovernmentRecordType.class)就可以了,否则采用下面的方式,这样结果就可以是一个实体对象。
public List<GovernmentRecordType> getRecordTypeById(Long governmentId) { String sql = "select o.id as id ,o.neirong_id as governmentId,o.wenzhong_id as recordTypeId from neirong_wenzhong as o where o.neirong_id ="+governmentId; // Query query = sessionFactory.getCurrentSession().createSQLQuery(sql).addEntity(GovernmentRecordType.class);//不能用该方法因为不存在hibernate的xml文件与数据库对应的表 Query query = sessionFactory.getCurrentSession().createSQLQuery(sql) .addScalar("id",Hibernate.LONG) .addScalar("governmentId",Hibernate.LONG) .addScalar("recordTypeId",Hibernate.LONG) .setResultTransformer(Transformers.aliasToBean(GovernmentRecordType.class)); return query.list(); }
后来又发现另一种使用方式:
public List<Researcher> getPublicResearcherForHot(int rowStart,
int numberOfResultsToShow) {
String sql = "select * from ir_researcher.researcher as re "
+ " where re.researcher_id in (select t.researcher_id from "
+ " (select r.researcher_id,count(*) as num from "
+ " ir_researcher.researcher_subscription as r "
+ " group by r.researcher_id ORDER BY num desc)as t)";
// Query query = hbCrudDAO.getSessionFactory().getCurrentSession().createQuery(hql);
Query query = hbCrudDAO.getSessionFactory().getCurrentSession().createSQLQuery(sql)
.addEntity("re",Researcher.class);
query.setFirstResult(rowStart);
query.setMaxResults(numberOfResultsToShow);
return query.list();
}
相关文章推荐
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
- 在hibernate中,如何把原生sql查询出来的结果映射到实体bean
- 自定义sql查询并封装为指定实体 - 类似Hibernate
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
- Hibernate命令式SQL查询的两种方式
- 关于Column '*' not found 解决方案 Hibernate使用SQL查询返回实体类型,即返回某个类,或实体类
- hibernate——两种查询方式
- ibatis 打印sql出来 log4j.xml与log4j.properties两种方式
- 4、Hibernate 实体关系映射(一、单边一对多关系 注解、xml两种方式)
- Hibernate查询结果转换为实体类型 (HQL/SQL)
- 关于Column '*' not found 解决方案 Hibernate使用SQL查询返回实体类型,即返回某个类,或实体类
- Hibernate SQL常量的查询语句时,只返加第一个字符的解决方式
- hibernate 原生sql查询映射到实体bean
- Hibernate 带参数查询的两种方式
- hibernate查询方式:HQL、SQL、Criteria方法、命名、动态分离查询、例子查询
- Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)
- 解决Hibernate原生SQL映射问题 - SQL查询出来的结果映射为值对象
- hibernate将本地SQL查询结果封装成对象
- Hibernate使用SQL查询返回实体类型
- Hibernate应用SQL查询返回实体类型