Внутреннее объединение 3 таблиц в JPA с предложением where - PullRequest
0 голосов
/ 01 марта 2020

Я изо всех сил пытаюсь сделать запрос, чтобы внутренне объединить 3 таблицы и иметь предложение where. Это как мое, где не существует.

Вот мои сущности:

CarModel сущность:

@Entity
@Table(name = "CARMODEL")
public class CarModel implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;


    @OneToMany(mappedBy = "carModel")
    private List<MyCars> myCars;

MyCars сущность

@Entity
@Table(name = "MYCARS")
public class MyCars implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @ManyToOne 
    @JoinColumn(name = "CarModel_id")
    private CarModel carModel= new CarModel();

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user = new User();

Пользовательская сущность:

@Entity
@Table(name = "USER")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @OneToMany(mappedBy = "user")
    private List<MyCars> myCars;

Вот графическое представление этих трех сущностей:

Represenation of the entities

А вот один из запросов, которые я пробовал :

public List<CarModel> findMyCarsByUserId(long IdUser)
{
    String requete = "SELECT DISTINCT cm\n" +
    "FROM MyCars ms\n" +
    " INNER JOIN CarModel cm INNER JOIN User u where u.id=2";

    Query query = em.createQuery(requete);
    //query.setParameter("iduser", IdUser);
    List<CarModel> cars = null;
    cars = (List<CarModel>) query.getResultList();  
    return cars;
}

Итак, здесь я пытаюсь получить все ModeleVehicule для данного user_id. Но у меня есть все ModeleVehicule таблицы, несмотря на предложение where.

У меня mysql запрос, работающий на то, что я хочу:

SELECT cm.marque,cm.modele, cm.motorisation, cm.anneeModele, cm.puissance 
  FROM carmodel cm
 INNER JOIN mycars ms ON cm.ID = ms.ModeleVehicule_id
 INNER JOIN user u ON ms.user_id = u.ID
 WHERE ms.user_id = 1

Что я делаю неправильно?

...