JPA里自定义SQL查询的一些问题

本文分享了一次使用SpringData JPA进行数据库操作时遇到的问题:因前端返回的ID与实体类中属性命名差异导致的查询失败案例。通过调整命名规则解决了系统错误,并介绍了如何避免下划线引起的误解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接着上次的图书管理系统

还书的时候不仅要在还书的数据表添加新纪录
还要去把借书表中对应的内容删除

但是因为前端我写的时候只返回了book_id和client_id
所以在还书的Service里还要根据这两个id去查出对应的借书记录,并删掉

这里可以用Spring data 里的自定义查询来实现
自定义查询以及Spring data JPA的使用方法可以在这里 有相关的介绍

因为我在设定Rent这个实体类了里设定的是book_id和client_id
所以在机智的IDEA的帮助下,我写了这么一句在repository里写了这么一句

     
1
     
Rent findByClient_idAndBook_id(Integer client_id, Integer book_id);

哈哈,这不是简单吗
然后运行
报错
哦,我天呐,来看看控制台的信息吧

     
1
     
No property client found for type Rent!

我来简单翻译下
在Rent里找不到client属性

client? 不是client_id 吗

经过查找,终于在文档里发现 一个下划线 _ 会被认为是And的意思
所以findByClient_idAndBook_id 就被理解为 根据client 和 id 和 book 和 id 来查找
然后系统在Rent里找不到client 所以就报错了

该怎么办呢?

嗯,所以命名时候就不要用_ 下划线就好了(IDEA 还挺 ‘机智’的)
现在去改应该还来的及
不说了,现在去改了..

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值