我做一个分组查询,用sql查询的,但是查询出来说列名无效。在数据库里运行sql语句是没问题的。
【INFO】2011-02-14 11:57:30 INFO [http-8080-Processor23] (NullableType.java:182) - could not read column value from result set: goodsId; 列名无效【代码】
Session session = HibernateTemplate.getInstance().getSession();
String sql = "select goodsName,status,effective,count(*) as counts from pointgoods group by goodsName,status,effective";
Query query = session.createSQLQuery(sql).addEntity(PointGoodsInfo.class);
List<PointGoodsInfo> queryList = query.list();运行到这就出错了。还有一个关联关系:
<class name="PointGoodsInfo" table="pointgoods">
<id name="goodsId" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">SEQ_pointgoods</param>
</generator>
</id>
<property name="goodsName"></property>
<property name="point"></property>
<property name="status"></property>
<property name="effective"></property>
<property name="pointType"></property>
<property name="counts"></property>
<!-- 配置一对一双向关联 -->
<one-to-one name="pointGoodsCard"
class="com.cn.project.entity.entity.PointGoodsCard"
property-ref="pointGoodsInfo" />
</class><class name="PointGoodsCard" table="pointgoodscard">
<id name="cardId" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">SEQ_pointgoodscard</param>
</generator>
</id>
<property name="cardNo"></property>
<property name="cardPassword"></property>
<many-to-one name="pointGoodsInfo" column="goodsId"
class="com.cn.project.entity.PointGoodsInfo"
unique="true" cascade="all" />
</class>
【INFO】2011-02-14 11:57:30 INFO [http-8080-Processor23] (NullableType.java:182) - could not read column value from result set: goodsId; 列名无效【代码】
Session session = HibernateTemplate.getInstance().getSession();
String sql = "select goodsName,status,effective,count(*) as counts from pointgoods group by goodsName,status,effective";
Query query = session.createSQLQuery(sql).addEntity(PointGoodsInfo.class);
List<PointGoodsInfo> queryList = query.list();运行到这就出错了。还有一个关联关系:
<class name="PointGoodsInfo" table="pointgoods">
<id name="goodsId" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">SEQ_pointgoods</param>
</generator>
</id>
<property name="goodsName"></property>
<property name="point"></property>
<property name="status"></property>
<property name="effective"></property>
<property name="pointType"></property>
<property name="counts"></property>
<!-- 配置一对一双向关联 -->
<one-to-one name="pointGoodsCard"
class="com.cn.project.entity.entity.PointGoodsCard"
property-ref="pointGoodsInfo" />
</class><class name="PointGoodsCard" table="pointgoodscard">
<id name="cardId" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">SEQ_pointgoodscard</param>
</generator>
</id>
<property name="cardNo"></property>
<property name="cardPassword"></property>
<many-to-one name="pointGoodsInfo" column="goodsId"
class="com.cn.project.entity.PointGoodsInfo"
unique="true" cascade="all" />
</class>
解决方案 »
- 原weblogic8项目部署到10上报错,java.lang.ClassCastException
- 连接mysql的问题
- 关于AJAX的GET传参
- myeclipse发布项目时出错,显示Source not found for Properties$LineReader.readLine() line: not available !!!!!
- IIS6,jboss4.2整合的问题
- 小弟最近要来上海找工作,请好心人帮帮忙?
- 关于数据库取值的问题,急
- tomcat下如何设置,让它自启动 自定义的有serversocket功能的servlet
- struts下,两个action之间能互相转发吗?
- Http请求怎样传HTTP版本和xml文件
- 这种两种数据库访问方式的设计各有什么优却点?
- 90后女孩:进公司后从Java转向Flex,需要学些什么。。
你试一下 :
String sql = "select goodsName,status,effective,count(*) as counts from pointgoods group by goodsName,status,effective";Query query = session.createSQLQuery(sql).addEntity(PointGoodsInfo.class).addScalar("counts",Hibernate.LONG).addScalar("goodsName",Hibernate.STRING).addScalar("status",Hibernate.STRING).addScalar("effective",Hibernate.STRING);
ID NAME PYM Filter
------ ---------- ------ ----------
0001 总公司 ZGS 0000
0002 哈尔滨分公司 HEBFGS 0001
。。 等等其他字段
我直接写sql进行查询
select ID,NAME,PYM,FILTER from DEPARTMENT 当如此查询时:
List<Object[]> list = session.createSqlQuery(sql).list();
在循环list看查询结果时,发现每一列都被截短了
得到
----- ----- ----- -----
0 总 Z 0
当如此查询时:
List<Object[]> list = session.createSqlQuery(sql).addScalar("id",Hibernate.STRING).addScalar("label",
Hibernate.STRING).addScalar("pym", Hibernate.STRING).addScalar("filter", Hibernate.STRING).list();
循环list的时,得到正常结果
我现在这样写:String sql = "select goodsName,status from pointgoods";
Query query = session.createSQLQuery(sql).addEntity(PointGoodsInfo.class).addScalar("goodsName",Hibernate.STRING).addScalar("status",Hibernate.INTEGER);
不分组查询也是报同样的错误,按你的那个写法也是报那个错误,是不是映射文件有问题?
还是说列名无效,不过这次是其他列名,每个属性都要用addScalar()这个方法吗?
<property name="goodsName" type="string"></property>
Query query = session.createSQLQuery(sql).addEntity("pg",PointGoodsInfo.class);如果还是报错,检查一下映射文件
如果不报错,那就是代码问题
String sql = "select goodsName,status,effective,count(*) as counts from pointgoods group by goodsName,status,effective";Query query = session.createSQLQuery(sql).addEntity(PointGoodsInfo.class).addScalar("counts",Hibernate.LONG).addScalar("goodsName",Hibernate.STRING).addScalar("status",Hibernate.STRING).addScalar("effective",Hibernate.STRING);
List list=query.list();
我要是进行类型转换的话,list应该是什么类型?应该不是List<PointGoodsInfo> list=query.list();吧?我怎么把list里的内容转换成对象,封装到PointGoodsInfo这个对象中去啊?
可以手动的处理这个list 封装到List<PointGoodsInfo>
你可以试一下 把查询的字段和表名都加上别名 看看是否可以 例如:
String sql = "select goodsName gn ,status s from pointgoods pg ";Query query = session.createSQLQuery(sql).addEntity("pg",PointGoodsInfo.class).addScalar("gn",Hibernate.STRING).addScalar("s",Hibernate.INTEGER)