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

实体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操作符,从一个集合类型的关系型成员属性中选择元素:

 

 

 

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

 

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

 

 

 

回到最初的话题,

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

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

 

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值