一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有。查询教拥有书"a"的学生的老师:
 
   class teacher{
 
   String id;
 
   String name;
 
   Set students;
 
   }
 
   class student{
 
   String id;
 
   String name;
 
   Set teachers;
 
   Set books;
 
   }
 
   class book{
 
   String id;
 
   String name;
 
   Set students;
 
   }
 
   利用连表的方法查询:
 
   SELECT t FROM teacher t join t.students s join s.books b where b.name = 'a'
 
   利用子查询(需要数据库支持子查询,mysql就不行)
 
   SELECT t FROM Teacher t,Student s,Book b where s.id in elements(t.students) and b.id in elements(s.books)
 
   另外t.students s中s并不是集合的意思,而是t的students对象的表别名,join t.students s这个hql,hibernate会翻译成两个表的内连接关系
 
   另一篇文章
 
   在Hibernate中类型为Set、List的实体属性也是可以连接查询的,例如User里面有一个Set knowledge属性要获取User中Knowledge的isShared的属性为true的User并且在返回的User中的knowledges中包含isShared为true的Knowledge对象的时候,就要通Set的过虑查询(左连接查询),在hibernate3.2.3以后的写法如下 www.lefeng123.com
 
   select distinct u from User u left join fetch u.knowledges k where k.isShare=true.
 
   这样就只会获取knowledge的isShared为true的User,并且User里面的knowleges中包含knowledge的isShared为true的Knowlege对象。
 
   需要注意的是:关键字distinct和fetch.要实现上面的数据过虑就得要这两个关键字。第一个关键字是独立的意思,第二个关键字是以一条sql语句执行。如果少了fetch这个关键字,则达不到目的。返回的结果是一个User包含isShared为true和false的knowledge集合托福答案 www.yztrans.com
 
   个人使用
 
   select js from edu.dzu.ksap.entity.JsBean js inner join js.xyBeans xy where xy.xydm=:xydm order by id
 
   JsBean为教室信息,XyBean为学院信息。学院--可使用教室的关系,为,但Xy为前期开发的模块,教室管理为新添加功能,Xy
 
   Bean不便于修改,当同学Xybean主键查询教室的信息时,可通过上面的HQL语句执行查询。需注意,由于为连表,需要select js,否则查找的对象不能转化为JsBean对象,即抛出java.lang.ClassCastException.

用Set中元素做条件查询的更多相关文章

  1. SQL 中的多条件查询

    在应用程序开发中,多条件查询是个经常遇到的情况,最简单最麻烦的方法是把所有的可能情况都考虑到,但是无疑是繁琐的,而且很容易漏掉可能的情形,下面是SQL语句实现多条件查询的情况 select * fro ...

  2. Hibernate多对多关联映射的HQL中的in条件查询问题

    群里有朋友求解一个问题,高分求一条HQL多对多查询语句 . 问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f758 ...

  3. java web中的多条件查询

    转自:http://blog.csdn.net/xulu_258/article/details/46623317 所谓多条件查询即为用户输入想要查询的条件,然后根据用户输入的条件进行查询. 当用户有 ...

  4. java中mongo的条件查询

    @Override public Page<ProductInfo> findAll(Pageable pageable, ProductInfo productInfo) { //创建一 ...

  5. php中的多条件查询

    首先是查询所有,步骤不详述,连接数据库,查询表中的所有信息,foreach循环以表格的形式打印出来 然后就是form表单中提交查询的数据,这里以post方式提交到本页面,所以要判断post中是否有值, ...

  6. mysql拆分字符串做条件查询

    mysql拆分字符串作为查询条件 有个群友问一个问题 这表的ancestors列存放的是所有的祖先节点,以,分隔 例如我查询dept_id为103的所有祖先节点,现在我只有一个dept_id该怎么查 ...

  7. Mybatis中的复合条件查询

    1.Map中根据字段名存儲: 定义接口:List<Student> selectByCondition1(Map<String,Object> map); 映射文件: < ...

  8. laravel读取memcached缓存并做条件查询

    public function onlineplayersource() { $res = $_POST['aoData']; $sEcho = 0; $iDisplayStart = 0; // 起 ...

  9. ThinkPHP中 按条件查询后列表显示

    最近在项目中遇到了需要根据下拉框的条件筛选出符合条件的数据,然后进行列表显示的问题. 在ThinkPHP中进行列表显示的传统过程:通过在后台控制器中查询出数据,然后通过$this->assign ...

随机推荐

  1. 7.1 Backup and Recovery Types 备份和恢复类型

    7.1 Backup and Recovery Types 备份和恢复类型 这个章节描述 不同备份类型的特点: 物理(raw)与逻辑备份 物理备份有raw 副本组成,存储数据库内容,这种类型的备份是适 ...

  2. INDEX RANG SCAN无需回表的情况

    create table a3 as select * from dba_objects create index a3_idx1 on a3(owner); select owner from a3 ...

  3. fg bg 等命令

    fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令 ...

  4. RFID系统的选择

    RFID系统的选择关键在于:1.对自身需求的明确:2.以业务为导向:满足今天的需求,又支持明日的发展:3.选择合适的解决方案供应商. RFID技术改变传统的仓库管理方式,能为您企业提高作业效率,节省大 ...

  5. DataTable与Linq相互转换

    DataTable通过dt.AsEnumerable()方法转换可用Linq查询,反之,Linq也可以转化为DataTableDataTable newDt = query1.CopyToDataTa ...

  6. maven项目 打可执行jar包

    1.pom添加 <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</art ...

  7. CCDictionary&CCArray执行retain()重要点

    CCDictionary也需要执行retain(),否则则跟CCArray,返回则释放对象. 在Lua中,忘记了retain(),导致一些出现gCCDictionary:objectForKey(ke ...

  8. Sqlserver查询表结构信息-字段说明、类型、长度等信息

    Sqlserver 中查询表结构信息-字段说明.类型.长度等信息综合语法. SELECT 表名 = d.name,--case when a.colorder=1 then d.name else ' ...

  9. wildcard

    [rusky@rhel7 test]$ lstest1  test123  test2  test317  test33  test335  test336  test44  testtest[rus ...

  10. ant打包命令

    学习ant打包命令.发布到以上tomcat还未做集成部署,无法添加到jenkins中. http://blog.csdn.net/telnetor/article/details/7015935 ht ...