关于Criteria查询关联表的问题.高分求助.

用criteria查询几个有关联的表.现在有3个有关联的表A>B>C.我现在只想查询b,并且得到表c的数据.不想查A的数据,如何写代码?我是这样写的,但是总是报空指针.S... 用 criteria 查询几个有关联的表.

现在有3个有关联的表 A>B>C.

我现在只想查询 b,并且得到表c的数据.

不想查A的数据,如何写代码?

我是这样写的,但是总是报空指针.

Session session = this.getSession();
DetachedCriteria de = DetachedCriteria.forClass(B.class);
Criteria c = de.getExecutableCriteria(session);

List<SysUser> s =c.list();
session.close();

如果改成
DetachedCriteria de = DetachedCriteria.forClass(B.class);
Criteria c = de.getExecutableCriteria(session);
de.createCriteria("a");
List<SysUser> s =c.list();
session.close();

则正确,但是又同时返回了表A里的所有值.

如何处理? 解决者有200分送上.
算了,你们可以无视上面的话. 从这里开始看.

现在有A B C三个关联表.关联关系为A>B>C
B中有private A a;属性.
C中有private B b;属性.

当我使用以下代码查询表C和B时,系统报错

DetachedCriteria de = DetachedCriteria.forClass(C.class);
DetachedCriteria def =de.createCriteria("b");
Criteria c = de.getExecutableCriteria(session);

List<SysUser> s =c.list();
session.close();

而如果我写成
DetachedCriteria de = DetachedCriteria.forClass(C.class);
DetachedCriteria def =de.createCriteria("b");
DetachedCriteria ded =def.createCriteria("a");
List<SysUser> s =c.list();
session.close();

则正确.

但是查询到的代码太多.(我不想查询A中的数据)
hibernate 3.0中默认的是延迟加载.
我在xml中也设置了lazy =true.

many to one里也设置了lazy="proxy"

但是产生影响的只是 sql代码 因为返回的B中的private A a;没有得到值,所以报空指针异常.

现在麻烦谁给我写一个能只查询B和C表并且不报空指针异常的代码出来.

PS:不要就来一句:"延迟加载". 那是废话,告诉我具体怎么做.
展开
 我来答
zhang_ly520
2008-12-18 · TA获得超过112个赞
知道答主
回答量:362
采纳率:0%
帮助的人:228万
展开全部
没太用过这个类,如果这样搞不定,写个hql语句查询对于3个表来说还是很简单的。例如from B where C.b = xx。参考一下吧。
lzj203355
2008-12-18 · TA获得超过2022个赞
知道小有建树答主
回答量:3147
采纳率:100%
帮助的人:1022万
展开全部
你不用考虑A表 因为是数据关联 你查B的时候 自动把B中的A查出来了
建议你再把要描述的内容组织一下 你说的比较模糊 不知道你要表达的什么意思
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-14
展开全部
推荐您去这看看,这样的问题都有详细的解决方法,他们的java教程讲解的比较全,你可以去学习下,希望对你有帮助
参考资料:http://www.baidu.com/s?wd=%B1%B1%B7%E7%CD%F8&rsv_bp=0&rsv_spt=3&inputT=422
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lucian_se
2008-12-18 · 超过27用户采纳过TA的回答
知道答主
回答量:215
采纳率:0%
帮助的人:109万
展开全部
用延迟加载试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式