使用相同的语法、条件,在SQL Sever能够查询出数据,可是在Hibernate的hql语言为啥就查不出来了呢?

本文描述了一位开发者在使用Hibernate进行数据库查询时遇到的奇怪问题,即查询结果始终为空,但手动使用相同的条件在SQL Server中却能获取到数据。通过输出参数并使用.trim()方法去除字符串末尾的不可见字符,最终解决了查询问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做项目的时候遇到一个非常奇葩的问题,一下是我的代码:

// 验证该文件名是否存在
	public boolean verifyAppName(String appName, int customerId, int typesName) {
		String hql = "from CustomerApplication where typeId = '" + typesName + "' and customerId = '" + customerId+ "' and customerAppName = '"+appName+"'";
		Session sess = (Session) HibernateSessionFactory.getSession();
		Query q = sess.createQuery(hql);
		List list = q.list();
		HibernateSessionFactory.closeSession();
		System.out.println("CustomerApplicationBean.verifyAppName()"+typesName+"----"+appName.trim()+"---"+customerId+"----"+appName+"----"+list.size());
		if (list.size() != 0) {
			return true;// 返回true表示数据库中已经有了
		} else {
			return false;
		}
	}

 

 

无论如何都查询不出想要结果,开始我以为是语法有误,于是检查了大半天,可是没有发现有错,况且如果语法真有错的话,系统会报:java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V....这种错误的。

然后我就开始考虑是满足条件的数据不存在,于是我在SQL sever里面新建查询,使用一样的条件进行查询,让我大为吃惊的是,竟然查出数据了!!这下我就有点懵逼了!于是我输出接受到的参数以后,就发现端倪所在了:

为什么我输出的list.size()平白无故换行了??问题应该就出在这里了!!!于是我调用.trim()方法把参数进行去空格以后,竟然真的能够查询出结果了。

这下就真相大白了,查不出理想的结果的原因就是我接收到的参数不是我想象中的参数:接收到的参数后面还有其他看不见的字符,将之去掉以后问题就解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值