[500分]在CMP中的find中如何实现对多表的查询,也就是使用多表的字段作条件进行查询!!?

zsq666 2004-07-28 03:10:17
谢谢,具体一点!
急急!!!!!!!!!!!!!!!
...全文
346 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
ww_stone 2004-11-02
  • 打赏
  • 举报
回复
yeshucheng(叶澍成),up
narilee 2004-11-02
  • 打赏
  • 举报
回复
gz
baffling 2004-11-02
  • 打赏
  • 举报
回复
gz
rabbitbug 2004-11-02
  • 打赏
  • 举报
回复
trumplet(检查)
EJB好象不支持视图VIEW吧
如果支持,那会方便好多
trumplet 2004-10-03
  • 打赏
  • 举报
回复
benjamin_von(雨过天晴)说的对。

EJB-QL方法与SQL不同,SQL是针对关系型数据的,而EJB-QL是针对对象的。

在关于EJB-QL的教程中,或者说是在CMP Bean的教程中,常有一段讲怎么把对象映射到关系型数据库的内容,我想,原因就在这里了,如果采用对象数据库(我没研究过)可能就不会这么麻烦了。
crazyxp 2004-10-03
  • 打赏
  • 举报
回复
我觉得在数据库据建立一个view(视图)的话可以比较简单的实现。
rabbitbug 2004-10-03
  • 打赏
  • 举报
回复
非常同意FlyPig1983(飞天猪)
QL里from后的名字是CMP的名字
而不是数据库表的名字
FlyPig1983 2004-08-02
  • 打赏
  • 举报
回复
在EJB QL里面的应该是CMP的名称,而不是表的名称
benjamin_von 2004-07-30
  • 打赏
  • 举报
回复
select object(jsb) from Jsb as jsb,Ygjbxx where jsb.ygxxbh=Ygjbxx.ygxxbh and Ygjbxx.xm = ?1 and jsb.jszt = ?2
这么写好象是不对哦!
根据以上ql我的理解是表Jsb与表Ygjbxx由外建关联,而且搂住需要三个约束条件:
1)Ygjbxx.xm = ?1
2)jsb.jszt = ?2
3)jsb.ygxxbh=Ygjbxx.ygxxbh
由于是两个表,肯定不能再一个cmp-ejb中同时访问.
基于以上的理解,我的解决方案是:
1,写2个ejb。one for jsb and one for Ygjbxx。两个ejb之间用ygxxbh字段写relationship。在jsb中调用Ygjbxx。
2,ql可以这么写:
SELECT OBJECT(jsb) FROM jsb as jsb, IN (jsb.relation) AS Ygjb
WHERE jsb.jszt = ?1 and Ygjb.xm = ?2
至于第三个条件,个人认为无需判断,因为两个表就是通过ygxxbh字段建立关联的,IN (jsb.relation) AS Ygjb 语句就已经找到相应的Ygjb纪录了。
3,数据库建立的时候外键关系别搞错!

应该就这样了,还有注意relationship的xml配置。
祝你好运!
Never give up!
zsq666 2004-07-30
  • 打赏
  • 举报
回复
我的信箱是:
zsq666@263.net
zsq666 2004-07-30
  • 打赏
  • 举报
回复
yeshucheng(叶澍成)和dvictor(victor)
各位好:
能否给个可以运行的例子,我感激不尽!
先谢谢!!!!!!!!!!!!!!!
dvictor 2004-07-30
  • 打赏
  • 举报
回复
写relationship 然后在sessionbean里做查询
lu8088 2004-07-30
  • 打赏
  • 举报
回复
yeshucheng(叶澍成) 支持你。我不会EJB,公司不用。
zzzai 2004-07-30
  • 打赏
  • 举报
回复
kexsong 2004-07-30
  • 打赏
  • 举报
回复
我来补充点:
1、首先,要知道,cmr必须在事务(trasition)中使用
2、在ejb-ql中,对cmr和cmp的使用,都是通过点号表达式来操作,注意in的使用
yeshucheng 2004-07-30
  • 打赏
  • 举报
回复
呵呵,今天下班前给你发过去。。。。
是我自己写的一个demo
benjamin_von 2004-07-30
  • 打赏
  • 举报
回复
把relationship这一段的xml给你贴出来吧
<relationships>
<ejb-relation>
<ejb-relation-name>jsb-Ygjsb</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>
Customer-has-an-Address
</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>jsb</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>relation</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>
Ygjsb-belongs-to-jsb
</ejb-relationship-role-name>
<multiplicity>Many</multiplicity>
<relationship-role-source>
<ejb-name>Ygjsb</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
</relationships>

就是这样了!
zsq666 2004-07-29
  • 打赏
  • 举报
回复
yeshucheng(叶澍成) :
您好!

哪如何实现呢??!
先谢谢!!!!!!!!!!!!!!!!!
yeshucheng 2004-07-29
  • 打赏
  • 举报
回复
呵呵,楼主要注意了有些ql语句在EJB2.0并不支持。。。。
zsq666 2004-07-29
  • 打赏
  • 举报
回复
对于Jsb这个CMP的find的SQL是这样写的(其中Ygjbxx是另一个CMP,表Jsb的外键ygxxbh是表Ygjbxx的主键):

select object(jsb) from Jsb as jsb,Ygjbxx where jsb.ygxxbh=Ygjbxx.ygxxbh and Ygjbxx.xm = ?1 and jsb.jszt = ?2
这样写老是报错
加载更多回复(11)

67,538

社区成员

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

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