服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 基于JPA查询部分字段的相关事项

基于JPA查询部分字段的相关事项

2021-12-07 13:24一颗小陨石 Java教程

这篇文章主要介绍了JPA查询部分字段的相关事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JPA查询部分字段相关事项

JPA使用HQL查询部分字段出错

org.hibernate.hql.internal.ast.QuerySyntaxException: XXX is not mapped

解决

应该@Entity指定name名,name值为对应表名,同@Table的name值相同

使用HQL的注意

1.想要使用JPA查询部分信息,需要使用HQL

2.select需跟实体,可以是map(必须是小写,大写试了下报错),或者是将待查询的字段单独封装成一个实体,new 实体

3.查询的字段中需要指定as别名,否则得到的map结果集中,key值默认是"0",“1”,“2”…数字

JPA中自定义查询语句一定要注意这些

JPA的原生语句如何支持where a=X and b>x,未找到。

于是自定义,由于JPA底层是hibernate,所以需要HQL语句。

真尼玛坑,sql语句为了所谓的面向对象,整个HQL语句,简直就是典型的强行面向对象。

所以,你不得不如此:select u from Table u where u.x=x and u.y>y

每次写这个最常忘记的是第二个u,完全反人类的语法。

而且JPA解析的时候,Table必须大写开头。

这个估计是先要JPA解析成HQL语句,再执行。

至于为啥要大写开头,可能是由于JPA的规定吧。

JPA会把TableEnt对应到table_ent这张表,为什么写成tableEnt就要报错。太不人性化。

补充

CTM,JPA查询语句中把元素开头写成了小写。

findByStatusAndTimeMilliLessThan写成了findByStatusAnd**t**imeMilliLessThan

这还是看到之前写的附带between的查询才想起来

然between可以混着写,那less和greater应该也行

也是被JPA的语法坑过几次,才会对JPA这么没信心。

比如:findFirst必须写成findFirstBy

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_43696529/article/details/102829549

延伸 · 阅读

精彩推荐