HQL zapytanie

0

Cześć. Mam zapytanie, którym chciałbym wyciągnąć dane w zasadzie w trzech tabel.

		String passangerHql = "select "
				+ "user "
				+ "from "
				+ "User user, Seat seat, OfferedRide offeredRide "
				+ "where seat.id_seat = user.id_user AND "
				+ "seat.id_offered_ride = " + 3;

Chciałbym wyciągnąć wszystkich userów, którzy znajdują się w tabeli Seat, a Seat znajduje się w OfferedRide o id = 3.
Zamiast dostawać wynik 2, dostaje 180. Zachodzą tu jakies połączenia kartezjańskie, ale nie wiem jak je wyeliminować. Czy ktoś ma może pomysł jak to w HQL'u rozwiązać ?

1
RezyserKinaAkcji napisał(a):
  		+ "User user, Seat seat, OfferedRide offeredRide "

Dlaczego deklarujesz 3 encje? Tutaj masz rozwiązanie. JOIN FETCH
https://vladmihalcea.com/hibernate-facts-multi-level-fetching/

Pewnie coś takiego:

"SELECT user
FROM User user
INNER JOIN FETCH user.seat seat
INNER JOIN FETCH seat.offeredRide offeredRide
WHERE offeredRide.id_offered_ride = " + 3
0

Wiesz co, coś sie pluje w tej linijce

INNER JOIN FETCH user.seat seat

Poprawiłbym, ale za bardzo nawet nie wiem jak :p

0

title

Tak wygląda schemat bazy

0

title

0
package borgwarner.com.pickmeup.entity;

import java.sql.Date;
import java.sql.Time;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="offered_ride")
public class OfferedRide {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id_offered_ride")
	private int id_offered_ride;
	
	@Column(name="id_user")
	private int id_user;

	@Column(name="date_of_ride")
	private Date date_of_ride;
	
	@Column(name="time_of_ride")
	private Time time_of_ride;
	
	@Column(name="number_of_free_seats")
	private int number_of_free_seats;
	
	@Column(name="ride_category")
	private int ride_category;
	
	@Column(name="from_where")
	private String from_where;
	
	@Column(name="to_where")
	private String to_where;
	
	@Column(name="user_comment")
	private String user_comment;
	
	public OfferedRide() {
		
	}

	public OfferedRide(int id_offered_ride, int id_user, Date date_of_ride, Time time_of_ride, int number_of_free_seats,
			int ride_category, String from_where, String to_where, String user_comment) {
		this.id_offered_ride = id_offered_ride;
		this.id_user = id_user;
		this.date_of_ride = date_of_ride;
		this.time_of_ride = time_of_ride;
		this.number_of_free_seats = number_of_free_seats;
		this.ride_category = ride_category;
		this.from_where = from_where;
		this.to_where = to_where;
		this.user_comment = user_comment;
	}
	
	public int getId_offered_ride() {
		return id_offered_ride;
	}

	public void setId_offered_ride(int id_offered_ride) {
		this.id_offered_ride = id_offered_ride;
	}

	public int getId_user() {
		return id_user;
	}

	public void setId_user(int id_user) {
		this.id_user = id_user;
	}

	public Date getDate_of_ride() {
		return date_of_ride;
	}

	public void setDate_of_ride(Date date_of_ride) {
		this.date_of_ride = date_of_ride;
	}

	public Time getTime_of_ride() {
		return time_of_ride;
	}

	public void setTime_of_ride(Time time_of_ride) {
		this.time_of_ride = time_of_ride;
	}

	public int getNumber_of_free_seats() {
		return number_of_free_seats;
	}

	public void setNumber_of_free_seats(int number_of_free_seats) {
		this.number_of_free_seats = number_of_free_seats;
	}

	public int getRide_category() {
		return ride_category;
	}

	public void setRide_category(int ride_category) {
		this.ride_category = ride_category;
	}

	public String getFrom_where() {
		return from_where;
	}

	public void setFrom_where(String from_where) {
		this.from_where = from_where;
	}

	public String getTo_where() {
		return to_where;
	}

	public void setTo_where(String to_where) {
		this.to_where = to_where;
	}

	public String getUser_comment() {
		return user_comment;
	}

	public void setUser_comment(String user_comment) {
		this.user_comment = user_comment;
	}
}
package borgwarner.com.pickmeup.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="seat")
public class Seat {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id_seat")
	private int id_seat;
	
	@Column(name="id_offered_ride")
	private int id_offered_ride;
	
	@Column(name="id_user")
	private int id_user;
	
	public Seat() {
		
	}

	public Seat(int id_seat, int id_offered_ride, int id_user) {
		super();
		this.id_seat = id_seat;
		this.id_offered_ride = id_offered_ride;
		this.id_user = id_user;
	}

	public int getId_seat() {
		return id_seat;
	}

	public void setId_seat(int id_seat) {
		this.id_seat = id_seat;
	}

	public int getId_offered_ride() {
		return id_offered_ride;
	}

	public void setId_offered_ride(int id_offered_ride) {
		this.id_offered_ride = id_offered_ride;
	}

	public int getId_user() {
		return id_user;
	}

	public void setId_user(int id_user) {
		this.id_user = id_user;
	}
}

package borgwarner.com.pickmeup.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id_user")
	private int id_user;
	
	@Column(name="id_activation_code")
	private String id_activation_code;

	@Column(name="user_name")
	private String user_name;
	
	@Column(name="user_surname")
	private String user_surname;
	
	@Column(name="user_email")
	private String user_email;
	
	@Column(name="user_password")
	private String user_password;
	
	@Column(name="user_phone_number")
	private String user_phone_number;
	
	@Column(name="user_car")
	private String user_car;
	
	@Column(name="user_description")
	private String user_description;
	
	@Column(name="is_active")
	private boolean is_active;
	
	public User() {
		
	}

	public User(int id_user, String user_name, String user_surname, String user_email, String user_password,
			String id_activation_code, String user_phone_number, String user_car, String user_description, boolean is_active) {
		this.id_user = id_user;
		this.user_name = user_name;
		this.user_surname = user_surname;
		this.user_email = user_email;
		this.user_password = user_password;
		this.id_activation_code = id_activation_code;
		this.user_phone_number = user_phone_number;
		this.user_car = user_car;
		this.user_description = user_description;
		this.is_active = is_active;
	}

	public int getId_user() {
		return id_user;
	}

	public void setId_user(int id_user) {
		this.id_user = id_user;
	}

	public String getUser_name() {
		return user_name;
	}

	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}

	public String getUser_surname() {
		return user_surname;
	}

	public void setUser_surname(String user_surname) {
		this.user_surname = user_surname;
	}

	public String getUser_email() {
		return user_email;
	}

	public void setUser_email(String user_email) {
		this.user_email = user_email;
	}

	public String getUser_password() {
		return user_password;
	}

	public void setUser_password(String user_password) {
		this.user_password = user_password;
	}

	public String getId_activation_code() {
		return id_activation_code;
	}

	public void setId_activation_code(String id_activation_code) {
		this.id_activation_code = id_activation_code;
	}

	public String getUser_phone_number() {
		return user_phone_number;
	}

	public void setUser_phone_number(String user_phone_number) {
		this.user_phone_number = user_phone_number;
	}

	public String getUser_car() {
		return user_car;
	}

	public void setUser_car(String user_car) {
		this.user_car = user_car;
	}

	public String getUser_description() {
		return user_description;
	}

	public void setUser_description(String user_description) {
		this.user_description = user_description;
	}

	public boolean isIs_active() {
		return is_active;
	}

	public void setIs_active(boolean is_active) {
		this.is_active = is_active;
	}	
	
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1