java - Jpa自动查询报错

查看:203
本文介绍了java - Jpa自动查询报错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

Springboot MySQL

使用Jpa的自动查询时
比如findAllByNameAndAgeAndSex(String name, String age, String sex);
运行时会报错,显示
nested exception is java.lang.IllegalArgumentException: Could not create query metamodel for method public abstract java.util.List com.dp.domain.IWorkerDataRepository.findAllByNameAndAgeAndSex(java.lang.String,java.lang.String,java.lang.String,java.lang.String)!

如果是findAllByNameAndAge,就是两个参数,就不会报错。

还有一个问题,MySql不支持布尔类型,自动建表时,实体类里的布尔变量在数据表中被映射成bit(1)了,开始没注意,后来在查询findAllByXXXisFalse时,也会报类似于上面的错误。

这两个问题是怎么解决,多谢了。

解决方案

我解决了这个问题。

后来我发现报错信息中还有一行,不管我怎么尝试,都是会提示某一个变量有问题,我做了一下修改,解决了。
我下面详细写一下这个问题。
其实web开发我不熟悉,我之前不是做这个是,所以我下面只是描述一下实际情况和我的推测,分享给大家看。同时,若有老鸟在,可以提一些建议。

实际上,我提问时上面列出的是伪代码,真实的情况是这样:
我的实体类里面有N个变量,其中,有的是类似于Name这样的一个单词组成的,还有一种是类似于bookName这样的两个词组成的。最重要的是,Name这种情况,在实体类中,首字母是大写的,而bookName这种情况,首字母是小写的。之前我这样用没有什么问题。
后来在用到findAllByP1AndP2AndP3时,我遇上了问题,我发现网上的讲解和样例,一般描述的比较简单,都是findAllByP1AndP2这种只有两个参数的情况,我以前也没用过JPA,我以为是这种简单的查询,参数不能过多,后来我也试了一下,改成了findAllByP1AndP2这样的,确实没报错,这样就验证了我的错误假设。而实际上,P1和P2,是像bookName这种,首字母小写的变量,而恰好,P3是Name这种首字母大写的变量。所以实际上是字母大小写问题。最后我把实体类的变量全改成了小写字母开头的,就没碰上问题。

这篇关于java - Jpa自动查询报错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆