巧用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操作符,从一个集合类型的关系型成员属性中选择元素:
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语句也很简洁,完美解决需求。
有一个对象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语句也很简洁,完美解决需求。
相关文章推荐
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma
- python random 从集合中随机选择元素
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma
- Jquery 取得当前选择的元素的父元素 得取某元素的子元素集合
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma
- kotlin集合操作符——元素操作符
- python random从集合中随机选择元素
- 作业: 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自
- 【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)
- python random 从集合中随机选择元素
- python random 从集合中随机选择元素
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma
- python random从集合中随机选择元素
- #448 – 在Grid中显示数据绑定元素的集合(Data Binding Elements in a Collection to a Grid)
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma
- siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的。
- JavaScript 的in 操作符 (“如何判断某值是否数组中的元素”?)
- Kotlin学习--集合操作符之元素操作符
- 单表-------主键、外键、选择操作,like操作符,in 批量查询、排序order by、表的复杂查询---分组函数(max/min/agv/sum/count)、group by、having
- python random从集合中随机选择元素