Java JPA参数类型不匹配问题求助:CityMake赋值给int参数
嘿,我来帮你搞定这个JPA的类型不匹配问题!先看看你遇到的异常细节:
消息:尝试将data.CityMake类型的值赋值给参数cityMakeMakeID,而该参数从查询语句
Select f from Foodmodel f WHERE f.cityMakeMakeID = :cityMakeMakeID order by f.foodModelName中预期类型为int。
描述:服务器遇到意外条件,无法完成请求。
异常类型:java.lang.IllegalArgumentException
问题原因
这个异常的本质很直白:你给JPQL查询里的:cityMakeMakeID参数传了一个CityMake对象,但查询语句里的f.cityMakeMakeID字段是int类型的——JPA没办法把一个对象直接转换成整数,自然就报错了。
解决步骤
修正参数赋值代码
找到你设置查询参数的代码块,肯定是像下面这样错误地传了对象:// 错误示例:传了CityMake对象,而不是它的ID值 TypedQuery<Foodmodel> query = em.createQuery(jpql, Foodmodel.class); query.setParameter("cityMakeMakeID", cityMakeObj);改成传递
CityMake对象对应的makeID属性值就行:// 正确写法:传入int类型的ID值 query.setParameter("cityMakeMakeID", cityMakeObj.getMakeID());如果是关联查询需求,调整JPQL语句
如果你本来就想通过CityMake对象来关联查询Foodmodel(而不是用ID),那说明你的JPQL写得不对。首先要确保Foodmodel实体里有和CityMake的关联属性(比如用@ManyToOne注解的cityMake字段),然后修改查询语句:// 关联查询的JPQL写法 String jpql = "Select f from Foodmodel f WHERE f.cityMake = :cityMake order by f.foodModelName"; TypedQuery<Foodmodel> query = em.createQuery(jpql, Foodmodel.class); query.setParameter("cityMake", cityMakeObj); // 这里直接传CityMake对象就没问题了确认实体类字段定义
最后再核对下Foodmodel实体里的cityMakeMakeID字段,确保它确实是int类型,而不是不小心定义成了CityMake类型。如果字段类型错了,那也要同步修正实体类的映射。
内容的提问来源于stack exchange,提问作者Jane

