关于Hibernate的createSQLQuery问题

Hibernate中createQuery与createSQLQuery的

   createQuery是主要执行HQL语句的,createSQLQuery是执行SQL语句的。

  
createQuery
查询出的数据是以生成的bean对象返回LIst;而createSQLQuery返回的是数组,

   所以要想把查询的数据转换为bean对象装入LIst返回就得手动转换:

    ①:如果要转换成的bean对象是一个实体类的话,可以用:

            Query query = session.createSQLQuery(sql).addEntity(实体类名.class);

    ②:如果要转换的bean对象是一个VO或者是POLO对象的话,得用:

            .setResultTransformer(Transformers.aliasToBean(VO对象名.class));

 

关于Hibernate.String 提示过期:

    HIbernate.String如果用在Hibernate4.0以上版本时会报错,因为在4.0以后不在使用了;

   
HIbernate.String应用在3.6.5版本及以下。用HIbernate.String如果报错或者提示过期的话可以用

     StandardBasicTypes.STRING代替。

 

 

下面是刚才用到的一段代码:

addScalar是把SQL语句里起的别名跟VO对象里的字段对应,StandardBasicTypes.STRING是转换成跟VO对象里对应的字段类型一致。

StringBuffer sb = new StringBuffer();
sb.append(“ SQL语句 ”);
Session session = this.getSession();
		Query query = session.createSQLQuery(sb.toString())
				.addScalar("username", StandardBasicTypes.STRING)
				.addScalar("count", StandardBasicTypes.STRING)
				//将结果集映射为OrderCountHBXBySJVO对象   
				.setResultTransformer(Transformers.aliasToBean(OrderCountHBXBySJVO.class));
		List<OrderCountHBXBySJVO> lists = query.list();

addScalaraddScalaraddScalaraddScalaraddScalaraddScalar

 

发表评论

邮箱地址不会被公开。 必填项已用*标注

昵称 *