我有一张article的文章表,也有一张目录表,分别用hibernate建立了关联,
一对多的,但category中没用lazy=false,为了性能考虑,
现在我想根据某个目录的ID读取该目录下的文章,但只想读文章里的某些属性就好了,我用如下的方法,但报错,
为什么呢?
String hql="select c.id,t.id,t.title,t.uploadtime,t.category,t.picurl,t.pic,t.istop,t.link,t.linktitle from Category c inner join c.articles as t where c.id="+categoryid+" order by t.uploadtime";
但却不能显示指定目录下的文章,为什么呢?
在查询的Query中设置实体映射
[code="java"]query.addScalar("id", Hibernate.LONG).setResultTransformer(Transformers.aliasToBean(FlqwVO.class));[/code]
[url]http://huajiang.iteye.com/blog/473220[/url]
报的错误异常信息粘全
用session.createSQLQuery()来执行你的HQL获取时跟你用JDBC获取一样
不知你是否是这样做的
用SQL语句,又是面向对象的一种方式:
SQLQuery sqlQuery = session.createSQLQuery(hql);
sqlQuery.addScalar("id",Hibernate.LONG).addScalar("title",Hibernate.INTEGER)....;
Iterator it = sqlQuery.list().iterator();
while(it.hasNext()){
Object[] rows = it.next();
//...
}
不知道对你是否有用?
你这个返回的是LIST ?还是? 你把你的SQL拿到pl/sql上跑下 看结果是什么。 或者你在pl/sql上面写SQL 再转成HQL 就不会有什么问题了。 你说你取不到,是页面取不到 还是 DAO里面就没有?
你在pl/sql上面写下SQL吧 把你想要的结果的SQL 写出来。 你这是在ORACLE?
String hql="SELECT c,t.id,t.title,t.uploadtime,t.category,t.picurl,t.pic,t.istop,t.link,t.linktitle from Category c left outer join fetch c.articles t where c.id="+categoryid;
好像需要 "******** c.id= '"+categoryid+"'";
不知道你怎么查的 。。你这2张表有数据吗?你是怎么关联的?从你的SQL语句怎么没发现他们关联在一起啊。。。。
[quote]你这个返回的是LIST ?还是? 你把你的SQL拿到pl/sql上跑下 看结果是什么。 或者你在pl/sql上面写SQL 再转成HQL 就不会有什么问题了。 你说你取不到,是页面取不到 还是 DAO里面就没有?[/quote]
我还是觉得你先把你的HQL转换成SQL看能不能得到你想要的结果
[quote]
因为我要取某个目录下的文章,并且要分页,我原来是这样写的;
Query query = getSessionFactory().getCurrentSession().createQuery(hql);
query.setFirstResult((pageNo - 1) * pageSize);
query.setMaxResults(pageSize);
那现在要如何改?
[/quote]
Object[] o = (Object)query.list().get(0);
那你的表里面有吗? 是不是能对应上啊。。。。。。 或者把你现在的set/get 从新生成下 。。。。
[quote]在这里是能输出文章的数目的,但在页面上却输出不到,
[/quote]
这个输出不到是什么意思,,你使用addscalar将id映射到实体,那么id可用,,
至于其它的,没加的就不可用了