我有这些课程:
@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
答案 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_CLASS
和cars
。并且没有trucks
表
但是由于您的Garage类中有Vehicle
,因此spring-data搜索Vehicle表,因此您会看到此错误。
一些建议。
这可以通过以下方式实现
1. private List<Vehicle> vehiclesList;
(只有一张桌子。InheritanceType.SINGLE_TABLE
)
2. Vehicle
(将有三个表InheritanceType.JOINED
,cars
,trucks
)
或
您可以将车库中的类型更改为某种具体类型,如汽车或卡车(这没有任何意义)