springBoot-JpaRepository异常
话不多说,直接上BUG:
第一条:
我一看,哦,原来是SQL语法异常导致无法提取结果集,
一个不可能发生的BUG发生了,因为SQL的查询语句并不是我写的,而是JpaRepository代理的
我继续看了下去,又一个BUG
第二条:
这里就有意思了,异常后面的那段话,意思在表里没有找到user_name这个列,确实我的表里面没有这个字段,以下是我的数据库表和javabean
@Data
@Entity
@Table(name = "user")
public class User {
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer Id;
private String userName;
private String gender;
public User() {
}
public User(String userName, String gender) {
this.userName = userName;
this.gender = gender;
}
}
没有user_name这个列是肯定的,但是想想,为什么JpaRepository代理sql语句会多出个字段呢,和user_name对应的应该是数据表里面的userName,但是为什么其他列没问题,就唯独userName变成为了user_name呢.
解答: 通过痛苦的代码底层半日游,以及几次测试,我了解到的关键点是,JpaRepository代理sql语句会自动把javabean中字段的userName转换为user_name,(字段中出现大写自动加下划线,并且改大写为小写)因此有两种解决方案,
一: 将javabean中的字段userName更改为username问题解决(sql不区分大小写)
二: 将数据库中的userName字段更改为user_name问题解决(字段匹配上了)