Mysql 接口jparepository上的自定义方法
我有两个实体:人和车。我想按使用JpaRepository的人的id列出汽车。我创建了双向关系,如下代码所示Mysql 接口jparepository上的自定义方法,mysql,hibernate,spring-boot,jpa,Mysql,Hibernate,Spring Boot,Jpa,我有两个实体:人和车。我想按使用JpaRepository的人的id列出汽车。我创建了双向关系,如下代码所示 public class Person { . . . @OneToMany(mapped = "person") @JsonManagedReference private List<Car> cars; . . . } 因此,我通过以下方式实现了JpaRepository以进行存储 public interface CarRepository extends JpaRe
public class Person {
.
.
.
@OneToMany(mapped = "person")
@JsonManagedReference
private List<Car> cars;
.
.
.
}
因此,我通过以下方式实现了JpaRepository以进行存储
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);
}
我需要在select上使用join?或者这是可能的?我明白了
查询中确实需要连接。遵循代码修复
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);
}
public interface CarRepository扩展了JpaRepository{
@查询(“在(Car.Person.id=Person.id)上从Car c内部连接Person p选择c,其中p.id=:Person\u id”)
公共列表getCarsByidPerson(@Param(“person_id”)long idPerson);
}
这不是连接,而是您现在已经编写了正确的JPQL,而不是SQL。默认情况下,该查询采用JPQL,并且person\u id
是一个SQL构造。相反,您应该编写从Car c中选择c,其中c.person.id=:person\u id
,它也会工作(由于属性路径c.person.id
而不是sql columnc.person\u id
),Hibernate将从中推断连接。
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]
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);
}