Как установить параметры запроса в Java Hibernate в отображении OneToMany? - PullRequest
0 голосов
/ 30 ноября 2018

У меня проблема: у меня есть 3 класса и 3 таблицы:

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "VehiclesBodies")
public class VehicleBody {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "vehicleBodyId")
    private Long vehicleBodyId;

    @JoinColumn(name = "trunk")
    private int trunk;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "vehicleModelId")
    private VehicleModel vehicleModel;

    @OnDelete(action = OnDeleteAction.CASCADE)
    @OneToMany(mappedBy = "vehicleBody")
    private List<VehicleDrive> vehicleDrives = new ArrayList<>();
}


@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "VehiclesDrives")
public class VehicleDrive {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "vehicleDriveId")
    private Long vehicleDriveId;

    @JoinColumn(name = "engine")
    private double engine;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "vehicleBodyId")
    private VehicleBody vehicleBody;

    @ManyToOne//(fetch = FetchType.LAZY)
    @JoinColumn(name = "dictionaryCarDriveId")
    private DictionaryCarDrive dictionaryCarDrive;
}


@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "DictionaryCarDrives")
public class DictionaryCarDrive {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JoinColumn(name = "dictionaryCarDriveId")
    private Long dictionaryCarDriveId;

    @JoinColumn(name = "name")
    private String name;

    @OneToMany(mappedBy = "dictionaryCarDrive")
    private List<VehicleDrive> vehicleDrives = new ArrayList<>();
}

Я хотел бы взять из базы данных только модели, которые имеют дизельный двигатель и которые каждая из этих моделей в списке vehicleDrivesимел только дизельные двигатели.

List<VehicleBody> vehicleBodies = em.createQuery(
        "Select distinct b from VehicleBody b " +
        "join b.vehicleDrives d " +
        "join d.dictionaryCarDrive c " +
        "where c.name=:name ", VehicleBody.class).
    setParameter("name", "Diesel").
    getResultList();

В настоящее время в список включены модели, которые имеют дизельные двигатели, но содержат не только эти двигатели (существуют также бензиновые двигатели).Я хочу, чтобы дизельные двигатели были в списке транспортных средств.Я совместил с join fetch, но ничего не помогло.Я использую postgres.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...