org.hibernate.hql.internal.ast.QuerySyntaxException错误原因_南丘xf的博客-程序员ITS301

技术标签: Mysql  Error  

在开发一个密码重置的功能过程中,因为调用方法失误,报了一个这样的错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: USERS is not mapped [sql语句],后面跟一大堆乱七八糟的东西,其实语句已经提示很明显,就是因为Hibernate。

我们都知道Hibernate执行查询的语句hql是面向对象的查询,而非面向数据库表的查询,因此在hql语句中的对象名必须与实体类的类名一致,并且严格区分大小写,不然就会报上述错误。

因为建了基类查询,其中有两个方法,其service和serviceImpl实现分别如下:

//service
public int execsql_SS(String sql);

    
//实现
@Override
public int execsql_SS(String sql) {
	int result = 0;
	Session ss = sessionFactory.openSession();
	Transaction ts = ss.beginTransaction();
	try {
		result = ss.createSQLQuery(sql).executeUpdate();
		ts.commit();
	} catch (HibernateException e) {
		ts.rollback();
		e.printStackTrace();
		throw e;
	} finally {
		ss.close();
	}
	return result;
}
//service
public int executeHql_SS(String hql);



//实现
@Override
public int executeHql_SS(String hql) {
	Session session = sessionFactory.openSession();
	Transaction ts = session.beginTransaction();
	int bl = 0;
	try {
		bl = session.createQuery(hql).executeUpdate();
		ts.commit();
	} catch (HibernateException e) {
		e.printStackTrace();
		throw e;
	} finally {
		session.close();
	}
	return bl;
}

解释一下,语句比较简单,就是:UPDATE USERS SET PASSWORD='' WHERE ……

调用executeHql_SS()方法报了如上错误,而调用execsql_SS()方法则可以正常执行,原因是什么呢?其不同之处就在于二者实现方法中这一句话的不同:

executeHql_SS()方法实现: 
session.createQuery(hql).executeUpdate();
		
execsql_SS()方法实现:
session.createSQLQuery(sql).executeUpdate();

两者的区别:
createQuery():使用hql语句进行查询,以Hibernate生成的Bean为对象,并将对象装入List中返回
参数:HQL查询
返回值:Query查询
抛出异常:HibernateException

createSQLQuery():使用sql语句进行查询,是以对象数组形式返回
参数:SQL查询
返回值:SQLQuery
抛出异常:HibernateException

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39309402/article/details/104512938

智能推荐

倍加福PVS58N-011AGR0BN-0013编码器_dkl113821586的博客-程序员ITS301_pvs58

倍加福PVS58N-011AGR0BN-0013编码器单圈绝对值编码器 PVS58工业标准外壳 ∅58 mmPROFIBUS 接口16 位,单匝速度传输更广泛的扩展功能可编程的限位开关调试模式伺服或夹紧法兰通用规格检测类型 光电采样设备类型 单圈绝对值编码器功能性安全相关参数MTTFd 80 a任务时间 20 aL10 1,9 E+11 在 6000 rpm 和 20/40 N 轴向/径向轴负载下诊断覆盖率 (DC) 0 %电气技术规格工作电压 10 … 30 V

ubuntu下安装tomcat_lazycece的博客-程序员ITS301_ubuntu下载tomcat

前提tomcat的运行需要有java环境,所以需要提前安装好java环境。点击如下链接查看ubantu下java环境的安装:https://blog.csdn.net/qq_28851503/article/details/81490768tomcat下载下载地址:https://tomcat.apache.org/选择自己想要下载的版本即可,这里以tomcat9为例。如下...

Go语言--字符串的使用_yunfan188的博客-程序员ITS301_go 对字符串中的换行符等特殊字符串转义

一 字符串类型字符串在Go语言中是以原生数据类型出现的,使用字符串就像使用其他基本类型(int、bool、float32、float64等)一样。Go语言中,使用关键字string来声明字符串变量。字符串的值为双引号中的内容,可以在Go语言的源码中直接添加非ASCII码字符。示例代码如下:str := "Hello, Golang"ch := "中文"1.1 字符串转义符Go语言的字符串转义符和其他编程语言的是一样,如:回车、换行、单双引号、制表符等。转义符 含义..

学习笔记:动手学深度学习 29 深度卷积神经网络(AlexNet)_进击的番茄~的博客-程序员ITS301_training on cuda:0

AlexNet 是更大更深的LeNet,10×参数个数,260×计算复杂度新进入了丢弃发,ReLU,最大池化层和数据增强AlexNet 赢下了2012 ImageNet竞赛后,标志着新的一轮神经网络热潮的开始Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]Type 'copyright', 'credits' or 'license' for more informationIPython 7

Style Transfer--AI在绘画领域上的应用_A君来了的博客-程序员ITS301

Part 1:Style Transfer是AI将不同风格和内容结合在一起从而创造出新艺术作品的技术。如Figure 1所示,将相机拍摄下的街景照片分别与梵高的《星空》、蒙克的《尖叫》以及透纳的《牛头人的沉船》结合在一起,创造出对应风格的油画作品。以梵高的《星空》为例,图c的内容和原始图像相近,除此之外天空中还呈现了《星空》中的月亮和星星,而绘画笔法上也继承了梵高的粗笔触,画面的整体色调和《...

随便推点

jobweb项目中所遇到知识点(Flask)_离开你,我才发现的博客-程序员ITS301

jobweb项目中所遇到知识点sqlalchemy . Customizing DDL数据定义语言(DDL)。发出时,将调用预定的操作顺序,并无条件创建DDL以创建每个表,包括所有约束和与其关联的其他对象。对于需要特定于数据库的DDL的更复杂的方案,SQLAlchemy提供了两种技术,可用于根据任何条件添加任何DDL,包括表的标准生成或单独添加。官方文档—>文档Flask扩展系列-用户会话管理Flask-Login 模块flask_login 是web开发框架flask的

inflate()布局属性不生效问题_Android百晓生的博客-程序员ITS301

最近项目抽取一个公共的父布局时,使用inflate动态加载头布局时,出现xml"最外层的属性" 不生效的情况,解决办法如下:解决办法:1、设置rootView,attachToRoot默认为true((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.navigation_l...

关于内核中 #ifdef CONFIG_**的问题_kangear的博客-程序员ITS301

经常在内核中看到这样的宏判断:#ifdef CONFIG_**....#endif比如,init/main.c中有这样的代码:#ifdef CONFIG_PROC_FS        proc_root_init();#endif这里的意思我知道,就是根据CONFIG_PROC_FS是否定义来选择proc文件系统。如果选择proc文件系统,在.config中就会

手工运行oracle job时报ora-03001,ORA-03001: unimplemented feature 报错处理_Alvis-lby的博客-程序员ITS301

ORA-03001: unimplemented feature 报错处理客户数据库出现 ORA-03001错误。问题重现如下:SQL> create table drive(id int);Table created.SQL> insert into drive select rownum from all_objects where rownum<=10;10 rows c...

H.266/VVC学习1- VTM6.0的安装和使用[email protected]唔问的博客-程序员ITS301

H.266/VVC学习1 VTM6.0的安装和使用现在学习的是视频压缩编码方向的,将平时所学知识记录下来,一来可供自己复习使用 二来,感兴趣的同学可以一起交流一下。国际视频编码最新标准H.266/VVC在H.265/HEVC基础上,采用新的编码工具来提升编码效率。一、版本介绍:VS版本是VS2017VTM版本是 VTM6.0需要注意的是VTM在使用前,需要用cmake编译工具(CM...

推荐文章

热门文章

相关标签