使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错

问题描述:

    今天在使用HQL的按照参数的名字查询数据库信息的时候报错如下:

org.hibernate.QueryException: Space is not allowed after parameter prefix ‘:‘ [from Users user where user.address=: userAddress]
    at org.hibernate.engine.query.spi.ParameterParser.parse(ParameterParser.java:95)
    at org.hibernate.engine.query.spi.ParamLocationRecognizer.parseLocations(ParamLocationRecognizer.java:75)
    at org.hibernate.engine.query.spi.HQLQueryPlan.buildParameterMetadata(HQLQueryPlan.java:289)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:124)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:219)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:197)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1736)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
    at $Proxy9.createQuery(Unknown Source)
    at com.hibernate.HibernateSessionFactory.getQuery(HibernateSessionFactory.java:72)
    at com.hibtest.entity.TestUsers.queryByNane(TestUsers.java:217)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

究其原因是由于我在编写HQL语句的时候在“ =: ”两边添加了多余的空格,所以导致错误的发生。

时间: 2024-10-11 00:32:03

使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错的相关文章

查询数据库信息(各表占用空间的情况和列表)

//查询数据库各表占用空间的情况 drop table #tcreate table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20), index_size varchar(20), unused varchar(20)) exec sp_MSforeachtable "insert into #t exec sp_spaceused '?'"  select * from #t //查

SQLSERVER 查询数据库信息

use dbname SELECT * FROM sysobjects WHERE (xtype = 'U') go xtype可替换为如下参数 --C = CHECK 约束 --D = 默认值或 DEFAULT 约束 --F = FOREIGN KEY 约束 --L = 日志 --FN = 标量函数 --IF = 内嵌表函数 --P = 存储过程 --PK = PRIMARY KEY 约束(类型是 K) --RF = 复制筛选存储过程 --S = 系统表 --TF = 表函数 --TR = 触

查询数据库信息

1.指定schema 数据库 use information_schema 2.查询所有数据的大小 select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES; 3.查看指定数据库的大小(如school) select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='schoo

“指定的参数已超出有效值的范围”在【 parameterUpdate.Add(new OracleParameter(&quot;STATUS&quot;, 0));】报错

改成:parameterUpdate.Add(new OracleParameter("STATUS", OracleDbType.Int32, 0)); 就不报错,并不能知道为什么,有知道为什么的,评论告诉我. /// <summary> /// 插入数据 /// </summary> /// <param name="model"></param> /// <returns></returns&g

SSH整合报错:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped[......]

非常诡异的报错,信息如下:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select count(*) from User u where u.userName=? and u.userPassword=? ]Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped类似的报错信息的解决方法,

【Struts2+Hibernate4】按照MVC思想使用Hibernate查询数据库,并且在前台使用OGNL表达式输出

本文将介绍Struts2与Hibernate的整合,两东西的整合并不需要用到Spring,完全可以各司其职,Struts2完成Java文件与Jsp页面交互,Hibernate完成数据库到Java文件的交互. 一.基本目标 还是那张在Mysql中已经用烂的Testtable表. 在index.jsp点击查询之后,能够把这张表的所有内容输出出来.而且表格是梅花间竹的不同颜色.当然这个例子已经很多书籍上说过了. 目录结构如下,严格按照MVC思想. 二.基本准备 1.这里就不再多说了,在Eclipse

SQL报错注入的12个函数及sql注入语句

转来的 侵删 1.通过floor报错,注入语句如下: and select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a); 2.通过ExtractValue报错,注入语句如下: and extractvalue(1, concat(0x5c, (select table_name from information_schema.tab

HQL语句查询

/** *  */package com.b510.example; import java.util.Iterator;import java.util.List;import java.util.Map; import org.hibernate.Criteria;import org.hibernate.FetchMode;import org.hibernate.Query;import org.hibernate.Session; /** *  * @author XHW *  * @

[Hibernate] 通过 properties 类和 hql 语句进行动态查询

//需要保证Emp和EmpProperties中的setter和getter以及属性以及 参数占位符(:eName) 的一致//动态查询 @Test public void test4(){ EmpProperties ep=new EmpProperties(); //set query conditions ep.seteName("%A%"); ep.setStartDate(new Date(383155200000L)); ep.setEndDate(new Date());