您的位置:首页 > 数据库

巧用EJB QL中的IN操作符,方便从集合中选择集合元素

2010-11-01 16:00 225 查看
实体Bean中很多关系是集合型的,方便地从这些关系中访问和选择bean是非常重要的。今天工作中遇到一个难题如下:

有一个对象A中包含多个对象B,对象B中又包含多个对象C,C对象中包含多个对象D.现在想根据对象D的id属性从数据库中查找出所有包含指定C对象的A对象。

对象结构如下:

 

A——>Set<B> blist——>Set<C> clist——>Set<D> dlist

 

看到需求的第一时刻很多人都可能想到使用子查询或者连接等来解决,但是如果结果比这更复杂的情况,SQL语句可能比较难写。通过查找EJB3.0的学习文档找到了很好的解决方法,写出来和大家一起分享。

EJB QL使用IN操作符,允许使用一个标识符来代表集合型成员属性中的单个元素。下列查询使用IN操作符,从一个集合类型的关系型成员属性中选择元素:

 

Select r from Customer as c, in(c.reservations) r;
 

 

IN操作符将reservations成员属性中的每个元素赋值给标识符r。一旦我们拥有了一个标识符能够代表集合中的每个元素,我们就可以直接对它们进行引用,而且可以在EJB QL语句中对它们进行选择操作。

 

其实IN操作符类似于SQL中 的Inner join,上述的查询还可以改写为:

 

Select r from Customer c inner join c.reservations r;
 

 

回到最初的话题,

A——>Set<B> blist——>Set<C> clist——>Set<D> dlist

我们根据D对象的id属性查找所用包含满足条件D的A对象,可以使用以下的EJB QL写法:

(Select a from A as a, in(a.blist) b, in(b.clist) c, where c.id = :id).setParameter("id",id);
 

 

是不是很方便,EJB QL语句也很简洁,完美解决需求。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ejb bean join sql 数据库 c
相关文章推荐