Данные 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(что не имеет смысла)

Другие вопросы по тегам