(1)根据c.name属性查询表category中的id、name、并进行倒序排序 Query q = session.createQuery("select c.id,c.name from Category c order by c.name desc"); List<Object[]> categories = (List<Object[]>)q.list(); (2)Topic与Category是多对一的关联关系,查询与Topic关联的category表中的id=1的所有Topic Query q = session.createQuery("from Topic t where t.category.id = 1"); List<Topic> topics = (List<Topic>)q.list(); 注意:关联 fetch type 的设置 (3)Topic与Category是多对一关联关系,Msg与Topic也是多对一关联关系。根据category.id=1来查询Msg。 Query q = session.createQuery("from Msg m where m.topic.category.id = 1"); (4)建一个与Msg相似的表MsgInfo来‘暂时’存放Msg表中取出来的内容 Query q = session.createQuery("select new com.hibernate.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg"); (5)解释:select t.title, c.name from Topic t join t.category c 为何不直接写Category c ? 原因是:Topic类中可能存在Category类的多个成员变量,各个成员变量的关联关系可能不同,所以需要明确指定区中一个成员变量。 (6)select count(*)返回所有满足条件的记录数 Query q = session.createQuery("select count(*) from Msg m"); (7)select max(m.id), min(m.id), avg(m.id), sum(m.id) from Msg m 详解:max:取出id最大值 --min:取出id最小值--avg:取出id的平均值--sum:取出所有id值得和。 (8)from Msg m where m.id between 3 and 5 详解:取出id在3和5之间的内容 (9)from Msg m where m.id in (3,4, 5) 详解:取出id为3、4、5的内容 (10)from Msg m where m.cont is not null 详解:取出Msg表中的cont值不为空的内容。 (11)from Msg m where m.cont is null 详解:取出Msg表中的cont值为空的内容。