两个简单的表, Newtype 新闻类型, news 新闻 一对多双向关系 HQL如下 String hql = " select s from Newtype s inner join s.news n where n.id=? ";
Query query = session.getSession().createQuery(hql);
query.setInteger(0,1);
List list = query.list();
for(int i=0;i<list.size();i++){
Newtype type = (Newtype)list.get(i);
System.out.println(type.getTypes());
} 现在只可以通过 主表也就是类型表 来获取, 但如果改为这样
for(int i=0;i<list.size();i++){
News news = (News)list.get(i);
System.out.println(news.getTitle());
}就会出现异常Exception in thread "main" java.lang.ClassCastException: pojo.Newtype cannot be cast to pojo.News
at main.Test.CreateHqlh(Test.java:65)
at main.Test.main(Test.java:22)
现在关系是双向的,我请问下,如何News表也能直接读取出数据?hbml:
类型表
<set name="news" cascade="all" outer-join="true" inverse="true">
<key column="typeid"></key>
<one-to-many class="pojo.News"></one-to-many>
</set>新闻表
<many-to-one name="newtype" column="typeid" insert="false"
update="false" class="pojo.Newtype"></many-to-one>
Query query = session.getSession().createQuery(hql);
query.setInteger(0,1);
List list = query.list();
for(int i=0;i<list.size();i++){
Newtype type = (Newtype)list.get(i);
System.out.println(type.getTypes());
} 现在只可以通过 主表也就是类型表 来获取, 但如果改为这样
for(int i=0;i<list.size();i++){
News news = (News)list.get(i);
System.out.println(news.getTitle());
}就会出现异常Exception in thread "main" java.lang.ClassCastException: pojo.Newtype cannot be cast to pojo.News
at main.Test.CreateHqlh(Test.java:65)
at main.Test.main(Test.java:22)
现在关系是双向的,我请问下,如何News表也能直接读取出数据?hbml:
类型表
<set name="news" cascade="all" outer-join="true" inverse="true">
<key column="typeid"></key>
<one-to-many class="pojo.News"></one-to-many>
</set>新闻表
<many-to-one name="newtype" column="typeid" insert="false"
update="false" class="pojo.Newtype"></many-to-one>
解决方案 »
- proxool 快照不能显示 出现500错误
- Struts2.1能用 ${param['user.name']}这样的写法么
- java 和c++ 是不是很不一样啊
- tomcat+jsp+javabean+access配置问题
- installshield6.2能不能做java的安装程序?
- 讨论Hibernate修改主键的方法?
- 郁闷
- 50分求用hbm2java转化hbm.xml到pojo的时候,为什么总提示log4j错误,急,解题立即给分
- 菜鸟提问:javax.naming.NameNotFoundException: Name "comp/env/Aaa" not found in context "java:".
- 谁能告诉我EJB的体系结构有哪些,这些体系结构的优缺点如何,万分感谢!
- 如果用springsecurity的登录的时候 怎么让他的异常返回信息等的返回中文的啊 springsecurity支持国际化吗
- prototype Ajax.PeriodicalUpdater 代码在firefox可用但IE不能用
Set news = Newtype.getNews();
然后循环
如果这样,
SessionFactorys session = new SessionFactorys();
String hql = " select s from Newtype s inner join s.news n where n.id=? ";
Query query = session.getSession().createQuery(hql);
query.setInteger(0,10);
List list = query.list();
for(int i=0;i<list.size();i++){
Newtype type = (Newtype)list.get(i);
Set set = type.getNews();
Iterator or = set.iterator();
while(or.hasNext()){
News news = (News)or.next();
System.out.println(news.getTitle());
}
}
}就会有两条Hibernate: select newtype0_.id as id0_, newtype0_.types as types0_ from hibernate.newtype newtype0_ inner join hibernate.news news1_ on newtype0_.id=news1_.typeid where news1_.id=?
Hibernate: select news0_.typeid as typeid1_, news0_.id as id1_, news0_.id as id1_0_, news0_.title as title1_0_, news0_.typeid as typeid1_0_ from hibernate.news news0_ where news0_.typeid=?怎么缩到一条语句呢?
没法子hibernate是这样实现的,如果要你自己写也要多条sql才能得到你想要的,你说对不?
Query query = session.getSession().createQuery(left_hql);
query.setInteger(0,1);
List list = query.list();
for(int i=0;i<list.size();i++){
Newtype type = (Newtype)list.get(i);
System.out.println(type.getTypes());
Iterator or = type.getNews().iterator();
while(or.hasNext()){
News news = (News)or.next();
System.out.println(news.getTitle());
}
}
}
你的映射文件已经配置了,为何还这么写HQL?