mysql - jparepository 接口(interface)上的自定义方法

标签 mysql hibernate spring-boot jpa

我有两个实体:人和汽车。我想使用 JpaRepository 按人员 ID 列出汽车。我创建了双向关系,如以下代码

public class Person {
.
.
.
@OneToMany(mapped = "person")
@JsonManagedReference
private List<Car> cars;
.
.
.
}

以及汽车的实体

public class Car {
.
.
.
@ManyToOne
@JoinColumn(name = "person_id")
@JsonBackReference
private Person person;
}

所以,我通过以下方式实现了 JpaRepository 到 CarRepository

public interface CarRepository extends JpaRepository<Car, Long> {
@Query("SELECT c FROM Car c WHERE c.person_id = :person_id")
 public List<Car> getCarsByidPerson(@Param("person_id")long idPerson);
}

字段 person_id 存在于数据库的汽车表中,但我在 spring-boot 启动时收到以下错误消息

org.hibernate.QueryException: could not resolve property: person_id of: com.jpa_study.Car [SELECT c FROM com.jpa_study.Car c WHERE c.person_id = :person_id]

我需要在选择时使用 join 吗?或者这是可能的?

最佳答案

我明白了!

确实需要 JOIN on QUERY。按照代码修复

public interface CarRepository extends JpaRepository<Car, Long> {
@Query("SELECT c FROM Car c INNER JOIN Person p ON (Car.person.id = Person.id) WHERE p.id = :person_id")
 public List<Car> getCarsByidPerson(@Param("person_id")long idPerson);
}

关于mysql - jparepository 接口(interface)上的自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57742345/

相关文章:

java - hibernate 保存或更新没有主键的对象

oracle - 如何映射 Hibernate 集合并强制执行 Oracle 的 NOT NULL 列约束?

java - 如何在不是来自 JNDI 的 JPA EntityMangerFactory 上设置数据源

java - 在 Spring Boot 中读取 MacOs 环境变量

spring-boot - 在 spring boot 2.1.1 自动配置中没有调用 addInterceptors

mysql - 删除级联时的外部约束不起作用

mysqldump 在备份时跳过一些表

javascript - 我想在输入框、表格或使用node.js的div中的.html文件中显示存储在mysql数据库中的数据

java - 如何在JAVA中通过Mailjet发送附件

mysql - 找到工资单最少的公司