springBoot-JpaRepository异常

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问题解决(字段匹配上了)

### Spring Boot 中使用 JpaRepository 的示例 为了在应用程序中利用 `JpaRepository` 进行数据操作,首先需要确保项目配置文件中包含了必要的依赖项。具体来说,在项目的构建文件(通常是 Maven 或 Gradle 文件)中应加入如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 此依赖会自动引入所有必需的库来支持 JPA 功能[^3]。 定义实体类时,需继承自 `JpaRepository<T, ID>` 接口,其中 T 表示实体类型而 ID 则代表主键的数据类型。下面是一个简单的例子展示如何创建一个名为 `DepartmentRepository` 的接口以管理 `Department` 实体对象的操作: ```java import com.amiya.springbootdemoproject.entity.Department; import org.springframework.data.jpa.repository.JpaRepository; public interface DepartmentRepository extends JpaRepository<Department, Long> { } ``` 通过这种方式声明之后,无需编写任何实现代码即可获得一系列预设的方法用于执行常见的 CRUD (Create, Read, Update, Delete) 操作以及分页查询等功能[^2]。 当遇到与 `JpaRepository` 相关的问题时,可以尝试以下几种解决方案: - **无法找到表/列**: 如果遇到了找不到特定表格或字段的情况,请确认已正确设置了 Hibernate DDL 自动生成属性 (`spring.jpa.hibernate.ddl-auto`) 并且数据库连接字符串指向的是预期的目标环境。 - **性能优化问题**: 对于复杂的查询语句可能会影响应用效率的情况下,考虑采用懒加载策略或是启用二级缓存机制来提高访问速度。 - **事务处理失败**: 当涉及多个持久化上下文之间的交互而导致异常抛出时,建议检查当前方法上是否有合适的 @Transactional 注解,并适当调整传播行为(propagation behavior),从而保证整个业务逻辑能够在一个完整的事务内完成。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值