Данные Spring JPA + TABLE_PER_CLASS полиморфны, сохраняя один ко многим
У меня есть эти классы:
@Entity
@Table(name = "garage")
class Garage {
@Id
private String id;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "garage_id", referencedColumnName = "id")
private List<Vehicle> vehiclesList;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
abstract class Vehicle {
}
@Entity
@Table(name = "cars")
class Car extends Vehicle {
}
@Entity
@Table(name = "trucks")
class Truck extends Vehicle {
}
Я использую все каскадом.
Когда я пытаюсь их упорствовать. Я получаю: SqlError, нет таблицы "транспортное средство"
Я хочу уточнить, что я всегда сохраняю гараж с одним типом транспортных средств
Поэтому, когда я ударил garageRepository.save(garage)
Я ожидаю, что детский стол (автомобиль или грузовик) будет заполнен. и garage_id будет новым гаражом.
Как это может быть сделано?
С уважением, Идо
1 ответ
Я считаю, что это не может быть достигнуто с InheritanceType.TABLE_PER_CLASS
стратегия.
Причина в том, что с помощью TABLE_PER_CLASS spring-data-jpa(Hibernate) создаст две таблицы в базе данных. cars
а также trucks
, И не будет Vehicle
Таблица.
Но так как у вас есть private List<Vehicle> vehiclesList;
В вашем классе Garage Spring-data ищет таблицу Vehicle и, следовательно, вы видите эту ошибку.
Пара предложений.
Это может быть достигнуто путем.
1. InheritanceType.SINGLE_TABLE
(Там будет только один стол. Vehicle
) 2. InheritanceType.JOINED
(Будет три таблицы cars
, trucks
, vehicle
)
или же
Вы можете изменить тип в Garage на конкретный тип, например, Car или Truck(что не имеет смысла)