Criteria实现多表查询

xiaoxiao2022-06-12  51

感谢这个兄弟的资料 [url]http://www.blogjava.net/danxy2008/archive/2006/01/18/28437.html[/url] 自己的例子有点复杂,我就摘抄这位的吧 Criteria 可以進行複合查詢,即在原有的查詢基礎上再進行查詢,例如在 Room 對 User 的一對多關聯中, 在查詢出所有的 Room 資料之後,希望再查詢 users 中 "age" 為 30 的 user 資料: Criteria roomCriteria = session.createCriteria(Room.class); Criteria userCriteria = roomCriteria.createCriteria("users"); userCriteria.add(Restrictions.eq("age", new Integer(30))); List rooms = roomCriteria.list(); // 只列出 users 屬性中有 user 之 "age" 為 30 的 Room Iterator iterator = rooms.iterator(); 要说明的是,我用这个方法查出来的list结果是一个Object数组.数组中的元素为关联的2个对象.这是需要注意的,不然会报ClassCastException 补上自己的例子: clss Person{private Integer id;private String name;private Date birthday;private Set addresses = new HashSet(0);....}class Address{private Integer addressid;private Person person;private String homeaddress;private String companyaddress;}Criteria criteria = test.session.createCriteria(Person.class).createCriteria("addresses").add(Restrictions.eq("addressid", 1));List list = criteria.list(); 运行后sql如下: Hibernate: select this_.id as id0_1_, this_.name as name0_1_, this_.birthday as birthday0_1_, address1_.addressid as addressid1_0_, address1_.personid as personid1_0_, address1_.homeaddress as homeaddr3_1_0_, address1_.companyaddress as companya4_1_0_ from test.person this_ inner join test.address address1_ on this_.id=address1_.personid where address1_.addressid=? 且结果为Person数组,不同于上次实践的结果,不知道是什么原因. 个人觉得应该还有其他方法,等会了再补充上来 相关资源:hibernate 进行多表查询每个表中各取几个字段
转载请注明原文地址: https://www.6miu.com/read-4933037.html

最新回复(0)