1

我有这些课程:

@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 将是新车库。

如何才能做到这一点?

问候,伊多

4

1 回答 1

1

我相信这不能通过InheritanceType.TABLE_PER_CLASS战略来实现。

原因是,使用 TABLE_PER_CLASS,spring-data-jpa(Hibernate) 将在数据库中创建两个表。carstrucks。而且不会有Vehicle桌子。
但是,由于您 private List<Vehicle> vehiclesList;在 Garage 类中有 spring-data 搜索 Vehicle 表,因此您会看到此错误。

几个建议。

这可以通过。
1. InheritanceType.SINGLE_TABLE(只有一张桌子。)Vehicle2. InheritanceType.JOINED(会有三张桌子cars,,,trucksvehicle

或者

您可以将车库中的类型更改为某些具体类型,例如汽车或卡车(这没有意义)

于 2018-03-13T14:49:11.373 回答