Hibernate高级查询实战

时间:2021-05-02

大家知道,在HibernateFramework中,提供了三种查询数据的方式:1.HibernateQueryLanguage(HQL):它是ANSISQL的最小OODialect,例:session.createQuery("fromCategorycwherec.namelike'Laptop%'");entityManager.createQuery("selectcfromCategorycwherec.namelike'Laptop%'");2.Criteriaquery:它是HQL查询的延伸,提供了一些高级查询功能例:session.createCriteria(Category.class).add(Restrictions.like("name","Laptop%"));3.NativeSQLquery:session.createSQLQuery("select{c.*}fromCATEGORY{c}whereNAMElike'Laptop%'").addEntity("c",Category.class);

最近,我在项目中经常遇到Hibernate数据查询的任务,我对一些我遇到的较难的课题举例进行说明:

《表述SELECT》Criteriacrit=session.createCriteria(User.class).setProjection(Projections.projectionList().add(Projections.property("lastname")).add(Projections.property("firstname")).list();

《表述WHERE》Criteriacrit=session.createCriteria(User.class).add(Restrictions.eq("email","foo@hibernate.org")).uniqueResult();

《表述GROUP》Criteriacrit=session.createCriteria(User.class).setProjection(Projections.projectionList().add(Projections.groupProperty("lastname")).add(Projections.groupProperty("firstname")).list()

《表述ORDER》Criteriacrit=session.createCriteria(User.class).addOrder(Order.asc("lastname")).addOrder(Order.asc("firstname")).list();

《取TOP5结果》:Criteriacrit=session.createCriteria(Cat.class);.setMaxResults(5).list();

《分页》:Criteriacrit=session.createCriteria(Cat.class).setFirstResult(1).setMaxResults(50).list();

《取查询结果》:如果使用select或group,必须使用object[]来获得查询结果List值;如果未使用select或group,必须使用javaobject[]来获得查询结果List值;

《涉及组合primarykey属性》:Criteriacrit=session.createCriteria(activitylog.class).add(Restricts.eq(“comp_id.custId”,customerid0)).add(Restricts.ge(“createdTs”,starttime)).add(Restricts.le(“createdTs”,endtime)).list();《ForeignKey联合查询》:Criteriacrit=session.createCriteria(activitylog.class).createAlias(“taskCodeRf”,“tc”).setProjection(Projections.projectionList().add(Projections.property("UserId")).add(Projections.property("tc.taskdescription")).list();

《NativeQuery》:SQLQueryquery=session.createSQLQuery(“selectactivitylog_seq.nextvalassessidfromdual”);Query.addScalar(“sessid”,Hibernate.LONG);Longlong0=query.uniqueResult();

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章