SpringData :下划线的那些破事
今天写一个查询语句的时候,报错如下
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'tag_ArticleRepository':
Invocation of init method failed;
nested exception is java.lang.IllegalArgumentException:
Failed to create query method
public abstract java.util.List com.fdzang.mblog.repository.Tag_ArticleRepository.getByTag_oId(java.lang.String)!
No property tag found for type Tag_Article!
查询Repository如下
package com.fdzang.mblog.repository; import com.fdzang.mblog.pojo.Tag_Article;
import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface Tag_ArticleRepository extends JpaRepository<Tag_Article,String> {
List<Tag_Article> getByTag_oId(String tag_oId);
}
一开始想到的是肯定是下划线会出问题,因为JPA对于命名规范比较严格,于是使用@Query注解进行测试
@Query("SELECT ta FROM tag_article ta WHERE ta.tag_oId = :tag_oId")
List<Tag_Article> getByTag_oId(@Param("tag_oId") String tag_oId);
报错如下
tag_article is not mapped
后来经过一番挫折,终于找到错误在哪儿了
@Query("SELECT ta FROM Tag_Article ta WHERE ta.tag_oId = :tag_oId")
List<Tag_Article> getByTag_oId(@Param("tag_oId") String tag_oId);
在@Query注解中,应该是实体的名称,而非数据库的表名,区分大小写
这个应该是Hibernate的底层实现原因,怪自己对Hibernate不熟悉而造成的
最后,总结一下:

以上是尚硅谷佟刚老师的SpringData教程,大致意思是在SpringDate的简单查询中,下划线有着特定的意思
他的解析会优先于在类里对比属性
如本次的 getByTag_oId() 就会解析为Tag_Article.Tag.oId 而不是Tag_Article.Tag_oId
因为下划线的优先级比较高,因此会先解析下划线,而后在类里进行比较
遇到这种问题的时候我们就可以基于注解开发了,毕竟SpringData的简单查询虽然简单,但是因为死板,所以命名方面比较苛刻
当然,最好的就还是别用这该死的下划线了!哈哈
SpringData :下划线的那些破事的更多相关文章
- SpringData JPA 在解析实体类字段时驼峰自动添加下划线问题
参考地址:https://my.oschina.net/javamaster/blog/2246886 SpringData JPA 使用的默认命名策略是: ImprovedNamingStrateg ...
- [转]CSS 类名的单词连字符:下划线还是横杠?
问题 CSS 类或 ID 命名时单词间连接通常有这几种写法: 驼峰式: solutionTitle.solutionDetail 用横杠连接: solution-title.solution-deta ...
- CSS 类名的单词连字符:下划线还是连接符?
本文的部分内容整理自我对此问题的解答: 命名 CSS 的类或 ID 时单词间如何连接? - 知乎 问题 CSS 类或 ID 命名时单词间连接通常有这几种写法: 驼峰式: solutionTitle.s ...
- 2018-11-09 VS Code英汉词典插件v0.0.4-驼峰下划线命名
首先, 在两天时间内安装数破百, 多谢支持. VS Code插件市场地址: 英汉词典 - Visual Studio Marketplace 开源库地址同前文: Visual Studio Code插 ...
- ASP.NET C# 登陆窗体 限制用户名只输入字母 数字以及下划线
文本框的输入限制,我们主要集中两个问题: 一.怎样限制用户名输入的长度? 答:设置txtName的属性 MaxLength="; (我们这里以10个字符为例) 二.怎样限制用户名只输入字母 ...
- 如何解决jpa 要求column 名称单词必须用下划线
[转]:http://www.jeesns.cn/article/detail/6657 先引出轮子http://blog.csdn.net/54powerman/article/details/76 ...
- UI-切圆角、透明度、取消按钮点击高亮效果、按钮文字带下划线
一.切UIView的某个角为圆角 如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadius属性即可(项目需要使用QuartzCore框架).而若要指定某 ...
- [CSS]textarea设置下划线格式
功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线 2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...
- python 里面的单下划线与双下划线的区别
python 里面的单下划线与双下划线的区别 Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __ ...
随机推荐
- c#自制抽奖小程序
#region 第一部分界面设计 ; Button button = new Button(); Image[] images = new Image[N]; PictureBox[] picture ...
- UI5-技术篇-签字板
签字板应用是通过创建自定义控件实现的,相关代码如下: 1.HTML <!DOCTYPE HTML> <html> <head> <meta http-equi ...
- Redis除了做缓存--Redis做消息队列/Redis做分布式锁/Redis做接口限流
1.用Redis实现消息队列 用命令lpush入队,rpop出队 Long size = jedis.lpush("QueueName", message);//返回存放的数据条数 ...
- linq 书籍推荐 博客汇总 (经典)
1.博客推荐 博客园linq专区 https://kb.cnblogs.com/zt/linq/ LINQ体验系列文章导航 https://www.cnblogs.com/lyj/archive/20 ...
- MySQL Backup--xtrabackup与Bulk Load for Create Index
场景描述:主从使用MySQL 5.7.19 1.从库上使用xtrabackup进行热备. 2.主库行执行DDL创建索引: ALTER TABLE `tb_xxx` ADD INDEX idx_good ...
- Linux Shell 小数比较
#!/bin/bash #######expr 方法是错误的,在比较相同位数时可以,当位数不同就会出错,如100.00>70.00就会得出错误的结果 a=123b=123c=99.99rat=` ...
- Keil、uVision、RealView、MDK、Keil C51之间的区别比较
我们要区别的概念:KEIL UVision,KEIL MDK,KEIL For ARM,RealView MDK,KEIL C51,KEIL C166,KEIL C251 从接触MCS-51单片机开始 ...
- c# Directory类的常用方法
- SecureCRT中文乱码解决已设置UTF-8了
参考网址:http://www.iitshare.com/securecrt-chinese-garbled-solution.html 问题描述 SecureCRT与SecureFX的常规选项里面已 ...
- CasPHP 便捷简单的 ThinkPHP 框架
便捷简单的 PHP 框架,自适应后台管理界面 Convenient and succinct(便捷的 简明的;言简意赅的) 核心框架:framework: 5.1.28助手函数:think-helpe ...