У меня проблема: у меня есть 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.