感谢这个兄弟的资料 [url]http://www.blogjava.net/danxy2008/archive/2006/01/18/28437.html[/url]
自己的例子有点复杂,我就摘抄这位的吧
Criteria 可以進行複合查詢,即在原有的查詢基礎上再進行查詢,例如在 Room 對 User 的一對多關聯中,
在查詢出所有的 Room 資料之後,希望再查詢 users 中 "age" 為 30 的 user 資料:
要说明的是,我用这个方法查出来的list结果是一个Object数组.数组中的元素为关联的2个对象.这是需要注意的,不然会报ClassCastException
补上自己的例子:
运行后sql如下:
Hibernate:
且结果为Person数组,不同于上次实践的结果,不知道是什么原因.
个人觉得应该还有其他方法,等会了再补充上来
自己的例子有点复杂,我就摘抄这位的吧
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数组,不同于上次实践的结果,不知道是什么原因.
个人觉得应该还有其他方法,等会了再补充上来