Spring Boot中对@OneToMany映射列使用JPA findBy查询
实现方法
你只需要在Invoice对应的Spring Data JPA Repository接口中,按照派生查询的命名规则定义方法即可,不需要手写SQL:
import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface InvoiceRepository extends JpaRepository<Invoice, Integer> { /** * 查询指定员工ID关联的所有发票记录 * @param employeeId 员工ID * @return 匹配的发票列表 */ List<Invoice> findByEmployee_Id(Integer employeeId); }
命名规则说明
- JPA派生查询会自动解析方法名的语义:
findBy后拼接查询条件,Employee_Id表示先定位到Invoice实体的employee关联属性,再匹配关联Employee实体的主键id字段,最终生成的SQL会自动通过@JoinColumn配置的employee_id外键做条件过滤,和手写外键等值查询效果完全一致。 - 方法名中的下划线
_是Spring Data JPA官方推荐的关联属性路径分隔符,可以避免属性名冲突:如果写成findByEmployeeId,当Invoice实体本身存在名为employeeId的字段时,JPA会优先匹配实体自身字段,而非关联Employee的id属性,容易触发查询报错。 - 如果需要叠加其他查询条件,直接在方法名后追加规则即可,比如要查询指定员工名下未删除的发票,可以定义方法:
List<Invoice> findByEmployee_IdAndIsDeletedFalse(Integer employeeId); - 如果你的
Employee实体主键不是Integer类型,把方法入参调整为对应主键的类型即可。
内容的提问来源于stack exchange,提问作者Talia Dianal
相关产品推荐
相关产品推荐

