Spring数据JPA + TABLE_PER_CLASS多态保存一对多

时间:2018-03-13 13:45:12

标签: hibernate spring-data-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 {

}

我正在使用cascade all。

当我试图坚持他们的时候。 我得到:SqlError,没有表&#39; vehicle&#39;

我想澄清一下,我总是坚持使用一种车辆的车库

所以当我点击garageRepository.save(garage)时,我希望填充子表(汽车或卡车)。而garage_id将是新车库。

如何做到这一点?

此致 IDO

1 个答案:

答案 0 :(得分:0)

我认为使用prefix = 'action1' n = 4 for i in range(0, 6): filename = f'{prefix}_{i:0{n}}.jpg' print(filename) 策略无法实现这一目标。

原因是,使用TABLE_PER_CLASS,spring-data-jpa(Hibernate)将在Database中创建两个表。 InheritanceType.TABLE_PER_CLASScars。并且没有trucks表 但是由于您的Garage类中有Vehicle,因此spring-data搜索Vehicle表,因此您会看到此错误。

一些建议。

这可以通过以下方式实现 1. private List<Vehicle> vehiclesList;(只有一张桌子。InheritanceType.SINGLE_TABLE) 2. Vehicle(将有三个表InheritanceType.JOINEDcarstrucks

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