hibernate里面通过session.createSQLQuery(sql) 我要查询多表怎么查?

lingjun_yang 2008-06-09 11:30:05
Query query=session.createSQLQuery(queryStringSql).addEntity("c",tablename.class);
List result1=query.list();


各位大虾!帮忙看看!
这样查是不是只能查询一个实体对像呀!
我要查多个表对象怎么查呀?
...全文
2884 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
k_kid9157 2011-10-12
  • 打赏
  • 举报
回复
学习 谢谢
xingwei4225 2011-04-11
  • 打赏
  • 举报
回复
学习学习
shixiheng 2010-12-20
  • 打赏
  • 举报
回复
低谷发股份
KKK2007 2008-06-11
  • 打赏
  • 举报
回复
tsycxl 2008-06-11
  • 打赏
  • 举报
回复
学习中
lingjun_yang 2008-06-09
  • 打赏
  • 举报
回复
嗯!非常感谢
我的理解是hibernate 封装了jdbc的操作本应该更简单一些才对呀!
这样实现好麻烦啊!
郁闷!!!
lingjun_yang 2008-06-09
  • 打赏
  • 举报
回复
我把代码贴出来吧
这是要执行的sql
final String queryStringSql1="select d.MIS_MENU_ID,f.*" +
"from T_MIS_USER_GROUP a, T_MIS_GROUP_DESCRIPT b, T_MIS_GRP_PERMISSION c, " +
"T_MIS_MENU d, T_MIS_MENU_REPORT e,T_MIS_BO_REPORT_DESC f " +
"where a.MIS_GROUP_ID=b.MIS_GROUP_ID and b.MIS_GROUP_ID=c.MIS_GROUP_ID " +
"and c.MIS_MENU_ID=d.MIS_MENU_ID and d.MIS_MENU_ID=e.MIS_MENU_ID " +
"and e.BO_REPORT_ID=f.BO_REPORT_ID and d.MENU_PARENTID="+misMenuPid+" and a.MIS_USER_ID='"+misUserId+"'";

//我在这里要怎么写?
Session session=getSession();

Query query=session.createSQLQuery(queryStringSql).addEntity("d", TMisMenu.class);

if(query!=null){
return query.list();
}
SDMRauquin 2008-06-09
  • 打赏
  • 举报
回复
public class UserInfo{
//所返回的具体对象属性
private Integer userId;
private Integer year;
private Integer month;
private Integer day;
private Integer point;
...
set
...
get
}

Query query=session.createSQLQuery(queryStringSql).addEntity(UserInfo.class);
SDMRauquin 2008-06-09
  • 打赏
  • 举报
回复
不过好像你用的不是这个形式。

查多表的实体。那么结果集自然不是一个表的对象了。要自己定义一个pojo了。

就是自己去定义一个set,get的UserInfo。而不能直接用hibernate自己生成的pojo
lingjun_yang 2008-06-09
  • 打赏
  • 举报
回复
谢谢你!能不能帮我说清楚一点呀!我刚接触hibernate的
还是用
Query query=session.createSQLQuery(queryStringSql).addEntity("c",tablename.class);
List result1=query.list();
这个查吗?那
.addEntity("c",tablename.class);
这里后面参数怎么填呀!
SDMRauquin 2008-06-09
  • 打赏
  • 举报
回复
List l = session.createCriteria("com.clairnet.hibernate.orm.Video")
.add(Property.forName("status").eq(new Integer(0))) //条件
.addOrder(Order.asc("id")) //排序
.createAlias("user", "u") //关联表
.list();


我的简单例子
Shine_Panda 2008-06-09
  • 打赏
  • 举报
回复
1,分开查。
2,报表查询 就是 select new Table(t1.a,t2.b ...) from ......
的形式。
zhouzongxi 2008-06-09
  • 打赏
  • 举报
回复
慢慢来吧 做多了就知道有个这样的pojo比你想的还要简单 只是写的复杂,但是工具会生成。。相信你会喜欢的。
而且封装好的东西改起来比较方便
sunyujia 2008-06-09
  • 打赏
  • 举报
回复
尽管是查多表但是返回的最好是一个对象,如果是我的话我会把sql尽量做成视图映射成pojo,把你从多个pojo里面摘取的东西抽想成一个对象,简化你现在的情况。
悠然的超能力 2008-06-09
  • 打赏
  • 举报
回复
List cats = sess.createSQLQuery("select {cat.*} from cats cat")
.addEntity("cat", Cat.class);
.setMaxResults(50);
.list();
lingjun_yang 2008-06-09
  • 打赏
  • 举报
回复
学习中!是的,说的很好!
我想是我自己还不会所以觉得很麻烦的。谢谢大家!
SDMRauquin 2008-06-09
  • 打赏
  • 举报
回复
你感觉生成的UserInfo很复杂?

你可以直接copy hibernate的pojo的前面那些 定义的 就是我列出来的 int。。。 string 。。。

再调用Ec自动生成set() get()方法。一个Info不需要几秒就出来了
zhouzongxi 2008-06-09
  • 打赏
  • 举报
回复
你建立了一个表后可以通过表生成一个对应的pojo 同时还帮你映射好了。。只要你去写查询了..
SDMRauquin 2008-06-09
  • 打赏
  • 举报
回复
hibernate是封装了,只不过你不会罢了。你是在学习阶段的话,推荐你去学习下我开始的例子 createCriteria的用法。那么就不需要写HQL那么麻烦了。

而且在表连接最好用inner 那样简单很多

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧