Spring JPA: ожидаемый путь присоединения - PullRequest
2 голосов
/ 24 мая 2019

Я использую Spring jpa для получения данных из двух таблиц, но когда я получаю данные с запросом, происходит ошибка ..

два стола: поездка и статус поездки

Моя модель: мои сущности:

@Entity
@Table(name="trip")
public class Trip {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;

@Column(name="start_address")
private String start_address;

@Column(name="end_address") 
private String end_address;

@Column(name="pickup_latitude")
private float pickup_latitude;

@Column(name="pickup_longitude")
private float pickup_longitude;

@Column(name="fee")
private float fee;

@Column(name="canceled_by")
private String canceled_by; 

@Column(name="canceled_at")
private Instant canceled_at;        

@Column(name="actual_distance")
private float actual_distance;

@Column(name="actual_price")
private float actual_price;     

/////////////////////////////////////////////
@Column(name="estimated_distance")
private float estimated_distance;

@Column(name="estimated_time")
private float estimated_time;

@Column(name="estimated_price")
private float estimated_price;

@Column(name="actual_time")
private float actual_time;

@ManyToOne(optional = false)
@NotNull
private TripStatus tripStatus;

// getter and setter    

мой репозиторий:

 @Repository
 public interface TripRepository extends JpaRepository<Trip, Integer> {

// TODO Auto-generated method stub  
@Query("SELECT trip FROM Trip trip INNER JOIN trip_status ON trip.trip_status_id = trip_status.id WHERE trip_status.id =: id")
public List<Trip> findById(@Param("id") int id);

  }

Когда я запускаю это, возникает проблема, за исключением следующего:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [SELECT trip FROM com.model.Trip trip INNER JOIN trip_status ON trip.trip_status_id = trip_status.id WHERE trip_status.id =: id]

Как решить проблему?

1 Ответ

0 голосов
/ 24 мая 2019

JPQL - это язык запросов JPA. Он работает ориентированным на объект способом, поэтому нельзя путать trip_status (имя столбца) с tripStatus (имя атрибута сущности).

Первое: ваше присоединение должно быть INNER JOIN trip.tripStatus ts

Второе: в JPQL указывать trip.trip_status_id = trip_status.id

необязательно

наконец: WHERE ts.id = :id

@Query("SELECT trip FROM Trip trip INNER JOIN trip.tripStatus ts WHERE ts.id =: id")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...