分享
 
 
 

OJB查询(二)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

联接:

在path expressions中(relationship.attribute)声明的联接在criteria中会被OJB自

动处理。Path expressions支持1:1,1:n,m:n多种关系。

下面的例子查找属于Liquors产品组的所有文章。文章和产品组的关系是在Article类中

的productGroup关系来建立的:

<!-- Definitions for org.apache.ojb.ojb.broker.Article -->

<class-descriptor

class="org.apache.ojb.broker.Article"

proxy="dynamic"

table="Artikel"

>

...

<reference-descriptor

name="productGroup"

class-ref="org.apache.ojb.broker.ProductGroup"

>

<foreignkey field-ref="productGroupId"/>

</reference-descriptor>

</class-descriptor>

<class-descriptor

class="org.apache.ojb.broker.ProductGroup"

proxy="org.apache.ojb.broker.ProductGroupProxy"

table="Kategorien"

>

...

<field-descriptor

name="groupName"

column="KategorieName"

jdbc-type="VARCHAR"

/>

...

</class-descriptor>

path expressions包含了productGroup和groupName间1:1的关系

Criteria crit = new Criteria();

crit.addEqualTo("productGroup.groupName", "Liquors");

Query q = QueryFactory.newQuery(Article.class, crit);

Collection results = broker.getCollectionByQuery(q);

如果path expressions指向一个有限制的类,那么查询条件就变成了Ored。下面的例子

查询所有文章名以F开头的ProductGroups。Path expressions 声明了allArticlesInGr

oup来表示Articles的限制:Books和CDs:

Criteria crit = new Criteria();

crit.addLike("allArticlesInGroup.articleName", "F%");

Query q = QueryFactory.newQuery(ProductGroup.class, crit, true);

Collection results = broker.getCollectionByQuery(q);

SQL语句如下:

SELECT DISTINCT A0.KategorieName,A0.Kategorie_Nr,A0.Beschreibung

FROM Kategorien A0

INNER JOIN Artikel A1 ON A0.Kategorie_Nr=A1.Kategorie_Nr

LEFT OUTER JOIN BOOKS A1E0 ON A0.Kategorie_Nr=A1E0.Kategorie_Nr

LEFT OUTER JOIN CDS A1E1 ON A0.Kategorie_Nr=A1E1.Kategorie_Nr

WHERE A1.Artikelname LIKE 'F%' OR

A1E0.Artikelname LIKE 'F%' OR

A1E1.Artikelname LIKE 'F%'

Prefetched 关系:

能够使通过关系查询对象的查询次数最小化。在我们的测试中,我们指定ProductGroup

s和Articles有一对多的关系。当查询ProductGroups,通过一个查询获得ProductGroup

s,对于每个ProductGroup我们再通过查询获得它的Articles。

OJB试着通过prefetched关系将属于ProductGroups的所有Ariticles通过一个查询得到。

让我们来看看为什么一个查询基本上不能实现:

Criteria crit = new Criteria();

crit.addLessOrEqualThan("groupId", new Integer(5));

crit.addOrderByDescending("groupId");

crit.addPrefetchedRelationship("allArticlesInGroup");

Query q = QueryFactory.newQuery(ProductGroup.class, crit);

Collection results = broker.getCollectionByQuery(q);

第一个查询获得所有匹配的ProductGroups:

SELECT ... FROM Kategorien A0 WHERE

A0.Kategorie_Nr <= ? ORDER BY 3 DESC

第二个查询从第一个查询的结构中获得属于ProductGroups的Articles:

SELECT ... FROM Artikel A0 WHERE A0.Kategorie_Nr

IN ( ? , ? , ? , ? , ? ) ORDER BY 7 DESC

获得了所有相关的Articles后,该方法还不支持对关系使用Arrays。

查询对象:

OJB查询返回完全的对象,这就意味着所有的实例变量会被赋值,所有的自动获得关系会

被加载。到现在为止,还没有方法能够只获得部分的对象(如仅仅得到personde 的fir

stname和lastname)

Report查询:

Report查询适合获得一行数据,但是不使真正意义上的商业对象。一行数据就是一个对

象数组,通过这些查询你能够定义什么样的对象属性你希望在一行数据中存在。属性名

也可以包括path expressions如'owner.address.street'。可以使用ReportQuery#setC

olumns(String[] columns)来定义属性。注意:这里的columns不是数据库中的columns

,column的名字应该和查询中的属性名一样。

下面的ReportQuery总结了每个ProductGroup的库存文章数目和价格:

Criteria crit = new Criteria();

Collection results = new Vector();

ReportQueryByCriteria q = QueryFactory.newReportQuery(

ProductGroup.class, crit);

// define the 'columns' of the report

q.setColumns(new String[] { "groupName",

"sum(allArticlesInGroup.stock)",

"sum(allArticlesInGroup.price)" });

crit.addGroupBy("groupName");

Iterator iter = broker.getReportQueryIteratorByQuery(q);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有