测试代码如下
1,测试实体类
package com.dtsoft;
import java.util.Date;
/**
* Test generated by MyEclipse Persistence Tools
*/
public class Test implements java.io.Serializable {
// Fields
private Integer id;
private Date dt;
// Constructors
/** default constructor */
public Test() {
}
/** minimal constructor */
public Test(Integer id) {
this.id = id;
}
/** full constructor */
public Test(Integer id, Date dt) {
this.id = id;
this.dt = dt;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getDt() {
return this.dt;
}
public void setDt(Date dt) {
this.dt = dt;
}
}
2测试代码
1:第一种方法
package com.dtsoft.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Configuration cf = new Configuration().configure();
SessionFactory sf = cf.buildSessionFactory();
Date date = new Date();
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(date);
rightNow.set(Calendar.HOUR_OF_DAY, 00);
rightNow.set(Calendar.MINUTE, 00);
rightNow.set(Calendar.SECOND, 00);
Date date1 = rightNow.getTime();
System.out.println(date);
Session s = sf.openSession();
String hql = "select * from text where dt<'"+date1+"'";
Transaction t = s.getTransaction();
t.begin();
s.createQuery(hql);
t.commit();
s.flush();
s.close();
}
报以下异常:
Mon Feb 07 03:12:40 CST 2000
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [select * from text where dt<'Mon Feb 07 00:00:00 CST 2000']
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.dtsoft.test.Test.main(Test.java:49)
Caused by: line 1:8: unexpected token: *
at org.hibernate.hql.antlr.HqlBaseParser.selectClause(HqlBaseParser.java:1330)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1106)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
... 9 more
2:一种方法
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Configuration cf = new Configuration().configure();
SessionFactory sf = cf.buildSessionFactory();
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(date);
rightNow.set(Calendar.HOUR_OF_DAY, 00);
rightNow.set(Calendar.MINUTE, 00);
rightNow.set(Calendar.SECOND, 00);
Date date1 = rightNow.getTime();
System.out.println(date);
Session s = sf.openSession();
String hql = "select * from text where dt<?";
Transaction t = s.getTransaction();
t.begin();
s.createQuery(hql).setDate(0, date1);
t.commit();
s.flush();
s.close();
}
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [select * from text where dt<?]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.dtsoft.test.Test.main(Test.java:49)
Caused by: line 1:8: unexpected token: *
at org.hibernate.hql.antlr.HqlBaseParser.selectClause(HqlBaseParser.java:1330)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1106)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
... 9 more
分享到:
相关推荐
### HQL语句详解 #### 一、HQL简介 HQL(Hibernate Query Language)是Hibernate框架中的查询语言,它提供了面向对象的方式来进行数据库查询。HQL语法接近于SQL但又有所不同,它允许开发者以面向对象的方式来表达...
以下将详细介绍HQL语句的几个关键部分: 1. **from 子句**:这是HQL查询的起点,用于指定要查询的持久化类。例如,`from Person as p`表示从`Person`类中选择所有实例。`as p`是别名,方便后续引用。 2. **select ...
3. **创建Query对象**:利用Session对象的`createQuery`方法,传入HQL语句创建Query实例。 4. **设置参数**:如果HQL语句中包含参数,需调用Query对象的`setXxx`方法为其赋值。 5. **执行查询并处理结果**:最后...
标题:“Hibernate 经常用的一些HQL语句” 描述:“可以让我们更方便的学习Hibernate” ### HQL(Hibernate Query Language)在Hibernate中的应用 HQL是Hibernate框架提供的查询语言,它允许开发者以面向对象的...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 1. 使用 HQL 进行基本查询 在第一个示例中,我们看到一个名为 `findPerson` 的方法,该方法执行了一个 HQL 查询来查找满足特定条件的人。这里的 ...
HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得开发人员可以更加专注于业务逻辑而非底层数据库的细节。 **1.1 基本查询** - *...
3. **创建Query对象**: 使用Session的`createQuery`方法,传入HQL查询语句,创建Query对象。 4. **设置参数**: 如果HQL中有参数,可以通过`setXxx`方法(如`setString`, `setDate`等)为参数赋值。 5. **执行查询*...
例如,如果我们只需要查询 User 实体的 name 和 age 属性,可以这样写 HQL 语句: ```java String hql = "select user.name, user.age from User user"; List[]> result = session.createQuery(hql).list(); ``` ...
HQL语句主要包括查询、选择、从、where、group by、having、order by等部分,与SQL非常相似。例如,一个简单的HQL查询可能如下所示: ```sql FROM Employee e WHERE e.name = 'John' ``` 这条语句将返回所有...
HQL是一种面向对象的查询语言,它允许开发者以面向对象的方式操作数据库,而无需直接与SQL语句打交道。 ### HQL查询数据库总条数 #### 代码解析 提供的代码段展示了如何使用HQL来获取数据库中特定表或查询结果的...
1. **find(String queryString)**: 这是最基础的HQL查询方法,接受一个HQL语句作为参数,返回所有匹配该查询的实体对象。例如,"from bean.User"会返回所有的User对象。 2. **find(String queryString, Object ...
在这里,`{param1}`是一个参数占位符,可以通过Query对象的setParameter方法传入实际值。 3. **执行SQL查询**:在Java代码中,我们可以使用SessionFactory的createSQLQuery方法来获取SQLQuery对象,然后调用其set...
在Java开发领域,尤其是使用Struts、Spring和Hibernate框架构建应用程序时,HQL(Hibernate Query Language)是一种强大的工具,用于处理对象关系映射(ORM)的数据库查询。HQL是面向对象的,允许开发者以类和对象的...
综上所述,Hibernate的HQL模糊查询是开发中不可或缺的工具,它提供了一种简单而强大的方式来处理数据库的模糊查询需求。通过理解并熟练掌握这些概念,可以更好地利用Hibernate进行数据操作,提升项目的开发效率和...
可以在Hibernate配置文件中定义命名查询,将HQL语句与名字关联,提高代码复用性和可读性。 7. **联合查询**: 使用`JOIN`关键字可以实现对象之间的关联查询,包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT...
在 Hibernate 中,所有的查询都是通过 `Query` 对象来实现的,可以通过 `Session` 对象的 `createQuery` 方法创建 `Query` 对象,并传入 HQL 语句。 ##### 1. 查询所有对象 以查询所有图书类别为例,HQL 语句如下:...
HQL语句中的实体类名对应于数据库中的表名,属性对应于列名。这使得代码更加面向对象,易于维护。 2. **基本查询结构** HQL的基本查询结构包括:SELECT,FROM,WHERE,GROUP BY,HAVING,ORDER BY等关键字。例如,...
HQL语句通常由以下几个部分组成: - **SELECT**:选择要查询的字段或对象。 - **FROM**:指定查询的实体类。 - **WHERE**:设置查询条件。 - **GROUP BY**:进行分组。 - **HAVING**:设置分组后的过滤条件。 - **...
在这个例子中,`@NamedQuery`定义了一个名为“findUsersByName”的查询,其HQL语句用于查找名字匹配给定参数的用户。这种方式提高了代码的可读性和可维护性,因为查询逻辑与实体类紧密相关。 除了`@NamedQuery`,...
1. **查询语句结构**:HQL查询语句的基本结构类似于SQL,由`FROM`、`WHERE`、`SELECT`、`GROUP BY`、`ORDER BY`等关键字组成,但使用类名和属性而非表名和列名。 2. **实体与类**:在HQL中,数据库表被映射为Java类...