0 0

hibernate查询的两种方式,有什么不同?5

数据库是sqlserver2005

为什么我的hql在第一种方法正常,第二种方法报错?

hql:" from PersonInfo p ,PersonAccount a where p.status <> 1 and (select count(o) from OrgPerson o where o.orgInfo.orgid='12345' and o.personuuid = p.personuuid and p.personuuid = a.personuuid  and p.status =0) > 0"

方法1:

List list = getHibernateTemplate().find(hql);

方法2:
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);

int firstResult = (fpi.getPage().intValue() == 1 ? 0 : (fpi.getPage().intValue() - 1) * fpi.getSize().intValue());
if(firstResult <=0 )firstResult = 0;

int maxResults = fpi.getSize().intValue();

query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
List list = query.list();
return list;
}
});

方法2会报如下错误:

Hibernate operation: could not execute query; bad SQL grammar [select personinfo0_.PERSONUUID as PERSONUUID0_, personacco1_.PERSONUUID as PERSONUUID1_, personinfo0_.PERSONCODE as PERSONCODE10_0_, personinfo0_.SORTNO as SORTNO10_0_, personinfo0_.CNNAME as CNNAME10_0_, personinfo0_.LASTNAME as LASTNAME10_0_, personinfo0_.FIRSTNAME as FIRSTNAME10_0_, personinfo0_.POLITYCODE as POLITYCODE10_0_, personinfo0_.IDTYPE as IDTYPE10_0_, personinfo0_.IDNO as IDNO10_0_, personinfo0_.SEX as SEX10_0_, personinfo0_.MARRYCODE as MARRYCODE10_0_, personinfo0_.EDUCATEHISTORY as EDUCATE12_10_0_, personinfo0_.DEGREE1 as DEGREE13_10_0_, personinfo0_.PHOTO as PHOTO10_0_, personinfo0_.DUTY as DUTY10_0_, personinfo0_.DUTYLEVEL as DUTYLEVEL10_0_, personinfo0_.OFFICETEL as OFFICETEL10_0_, personinfo0_.HOMETEL as HOMETEL10_0_, personinfo0_.OFFICEFAX as OFFICEFAX10_0_, personinfo0_.MOBILE as MOBILE10_0_, personinfo0_.EMAIL1 as EMAIL21_10_0_, personinfo0_.EMAIL2 as EMAIL22_10_0_, personinfo0_.ADDRESS as ADDRESS10_0_, personinfo0_.POSTALCODE as POSTALCODE10_0_, personinfo0_.MEMO as MEMO10_0_, personinfo0_.STATUS as STATUS10_0_, personacco1_.USERID as USERID9_1_, personacco1_.PASSWORD as PASSWORD9_1_, personacco1_.ACCOUNTTYPE as ACCOUNTT4_9_1_, personacco1_.VALIDDATE as VALIDDATE9_1_, personacco1_.LASTLOGINTIME as LASTLOGI6_9_1_, personacco1_.LASTLOGINIP as LASTLOGI7_9_1_, personacco1_.ACCOUNTSTATUS as ACCOUNTS8_9_1_, personacco1_.CREATETIME as CREATETIME9_1_ from framework.PERSON_INFO personinfo0_, framework.PERSON_ACCOUNT personacco1_ where personinfo0_.STATUS <>1 and (select count(orgperson2_.ORGPERSONID) from framework.ORG_PERSON orgperson2_ where orgperson2_.ORGID='2c90a84e1b01388f011b013bdbea0003' and orgperson2_.PERSONUUID=personinfo0_.PERSONUUID and personinfo0_.PERSONUUID=personacco1_.PERSONUUID and personinfo0_.STATUS=0)>0]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'where'.

....

太奇怪了!!
2008年7月09日 14:36

1个答案 按时间排序 按投票排序

0 0

没有看懂你的方法2,晕

2008年7月17日 01:24

相关推荐

    hibernate里面的 两种查询

    在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API...理解并熟练掌握这两种查询方式,将有助于提升Hibernate的使用效率和代码质量。

    Hibernate的查询方式

    通过掌握这两种查询方式,开发者能够以面向对象的方式构建复杂查询,同时保持代码的清晰度和可维护性。无论是初学者还是有经验的开发人员,深入理解这些查询机制都是提高项目效率和质量的关键。

    Spring与Hibernate两种组合方式

    Spring与Hibernate两种组合方式

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...

    Hibernate连表查询 Hibernate连表查询

    对于连表查询的结果处理,通常有两种常见的方式: #### 1. 获取单个字段值 如果只需要查询结果中的一个或几个字段,可以像下面这样处理: ```java for (int i = 0; i (); i++) { Object[] o = (Object[]) list....

    hibernate多表联合查询

    通过以上两种方式,我们不仅能够灵活地进行多表联合查询,还可以有效地将查询结果映射到Java对象中。这对于提高代码的可读性和维护性非常有帮助。 总之,Hibernate提供了一系列强大的工具和技术,可以帮助开发者...

    Hibernate分页查询原理解读

    Hibernate提供了两种基本的分页查询方法: 1. **基于SQL LIMIT关键字的分页**:这种方式适用于支持LIMIT关键字的数据库,如MySQL。 2. **基于ROWNUM的分页**:这种方式主要针对Oracle等不支持LIMIT关键字的数据库。 ...

    Hibernate 两种方式映射many to many

    在Hibernate中,有两种主要的方式来映射这种关系:使用中间表(Association Table)和使用双向一对多集合。 **1. 使用中间表映射多对多关系** 在数据库层面,多对多关系通常通过一个中间表来实现,这个中间表包含...

    hibernate one to one 映射到两种方式

    在Java的持久化框架Hibernate中,一对一(One-to-One)映射是一种常见关系映射,用于表示两个实体之间一对一的关联。...了解这两种方式及其原理,有助于我们在实际开发中更好地利用Hibernate进行数据持久化操作。

    让Hibernate同时支持xml和注解两种映射方式

    Hibernate支持两种主要的映射方式:XML映射文件和注解映射。然而,默认情况下,一个项目只能选择其中一种方式进行配置。但有时候,根据项目需求,可能需要同时使用XML和注解映射。在这种情况下,我们需要进行一些...

    hibernate一对一的两种实现方式

    在Java的Hibernate框架中,一对一关联提供了基于主键和基于外键两种实现方式,它们各有适用的场景。理解和掌握这两种方式,有助于我们更好地设计和实现Java应用的持久化层。在实际开发中,应根据业务需求和数据模型...

    Hibernate的缓存级联查询

    在一对一关联的映射中,Hibernate提供了两种方式:外键映射和主键映射。外键映射是通过在主表映射文件中使用`one-to-one`元素,而从表映射文件中使用`many-to-one`元素来实现。主键映射则是两个实体类的主键相互关联...

    Hibernate 参数查询通用方法

    这两种方式都可以实现动态参数查询,即根据传入的参数来构建不同的SQL语句。以下是对这两种方法的详细说明: 1. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,语法类似于SQL,...

    hibernate查询语句--HQL

    ### Hibernate 查询语句 -- ...综上所述,HQL 提供了一种强大而灵活的方式来查询 Hibernate 中的数据。通过掌握这些基本概念和技巧,开发人员可以轻松地构建复杂的数据查询逻辑,并有效地管理应用程序中的数据访问层。

    Hibernate part 14:查询及数据库并发事务

    5. **乐观锁与悲观锁**:Hibernate提供了这两种并发控制策略。乐观锁假设冲突较少,只在提交时检查版本号;悲观锁则在读取数据时就进行锁定,防止其他事务修改。 6. **事务管理**:在Hibernate中,可以通过编程式...

    Struts和Hibernate分页及查询

    总结起来,"Struts+Hibernate分页及查询"项目展示了如何利用这两种框架进行数据交互和展示,是学习和掌握Java Web开发的重要实践。通过这个项目,开发者可以深入理解MVC模式和ORM理念,提升在复杂业务场景下的开发...

    hibernateHQL关联查询

    Hibernate支持以下几种连接查询方式: 1. **内连接(Inner Join)**:`INNER JOIN` 或 `JOIN` ```java String hql = "SELECT s.stuName, e.examScore FROM Student s JOIN Exam e ON s.stuID = e.stuID"; ``` 2....

    Hibernate存储Clob字段的方式总结

    以上就是Hibernate存储Clob字段的两种常见方式的总结。在实际开发中,可以根据需求选择使用String直接映射Clob的方式或者使用Clob类型处理方式,并注意Hibernate session的创建和管理方法,以保证代码的简洁性与效率...

    Hibernate_QBC查询

    **QBC(Query By Criteria)查询** 是Hibernate提供的一种动态查询方式,它利用Hibernate的`QueryByCriteria` API来进行对象查询,相比于直接编写SQL语句,QBC查询提供了一个更面向对象的方式来构造查询条件,使得...

Global site tag (gtag.js) - Google Analytics