Запросы dsl для типов наследования

У меня есть три класса, такие как Vehicle как базовый тип, а Car and Bike - это класс Vehicle.

Проблема в том, что я хочу получить все Транспортные средства, использующие запрос dsl, и условия для транспортных средств

  • Автомобильный объект должен быть заполнен маркой и полным количеством фишек (не любых других)
  • Объект велосипеда должен быть заполнен только полем бренда (не любым другим).

Класс автомобиля

@Entity
@Table(name="vehicles")
@Inheritance(strategy=InheritanceType.JOINED)
public class Vehicle {
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 @Column(name = "id", length = 30)
 private Integer id;
 private String brand; 
 private String color;

 public String getBrand() {
 return brand;
 }

 public void setBrand(String brand) {
 this.brand = brand;
 }

 public String getColor() {
 return color;
 }

 public void setColor(String color) {
 this.color = color;
 }
}

Класс автомобиля

@Entity
@Table(name="cars")
public class Car extends Vehicle {
 private int totalDoor;
 private int numeberofSeats;

 public int getTotalDoor() {
 return totalDoor;
 }

 public void setTotalDoor(int totalDoor) {
 this.totalDoor = totalDoor;
 }

 public int getNumeberofSeats() {
 return numeberofSeats;
 }

 public void setNumeberofSeats(int numeberofSeats) {
 this.numeberofSeats = numeberofSeats;
 }
}

Класс велосипеда

@Entity
@Table(name="bikes")
public class Bike extends Vehicle {
 private int numerberOfTiers;

 public int getNumerberOfTiers() {
 return numerberOfTiers;
 }

 public void setNumerberOfTiers(int numerberOfTiers) {
 this.numerberOfTiers = numerberOfTiers;
 }
}

Запрос для всех автомобилей, но где указать автомобильные и велосипедные прогнозы?

List<vehicle> vehicles = new JPAQuery(manager)
 .from(vehicle)
 .distinct()
 .list(Projections.bean(Vehicle.class , vehicle.brand));
</vehicle>
1 ответ

Вы можете заполнять определенные подтипы в отдельных запросах, но не в одном запросе. Таким образом, вы можете либо задать отдельные запросы для подтипов, либо опубликовать результаты процесса.

licensed under cc by-sa 3.0 with attribution.