【问题标题】:Spring data JPA + TABLE_PER_CLASS polymorphic save one to manySpring data JPA + TABLE_PER_CLASS 多态保存一对多
【发布时间】:2018-08-21 19:20:29
【问题描述】:

我有这些课程:

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

如何做到这一点?

问候, 伊多

【问题讨论】:

    标签: hibernate spring-data-jpa table-per-class


    【解决方案1】:

    我相信InheritanceType.TABLE_PER_CLASS 策略无法实现这一点。

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

    几个建议。

    这可以通过以下方式实现。
    1. InheritanceType.SINGLE_TABLE(只有一张桌子。Vehicle) 2.InheritanceType.JOINED(会有三个表carstrucksvehicle

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

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      相关资源
      最近更新 更多