JPA实体关系取决于其他字段

时间:2019-10-07 23:28:24

标签: spring-boot jpa

我的数据库有一个表,该表代表一堆其他事物之间的公共字段。因此,假设有一个像Vehicle这样的表,然后Vehicle包含VIN,颜色,类型...

然后还有其他表,例如CarTruck,当Vehicle上的“类型”为“汽车”时,我们想查看Car表查找其他属性。也许关于fuelEfficiency和numPassengers的东西。当类型为“卡车”时,我们想了解有关卡车的信息,例如loadCapacity等。

您如何建模这样的东西?您是否将Vehicle嵌入其他所有类型?有没有一种方法可以像有条件地在“类型”字段中的表之间进行@OneToOne一样?

1 个答案:

答案 0 :(得分:0)

如果要遵循真正的ORM方法,则可以使用MappedSuperClass或JoinedTable策略。但这要付出代价。这些策略还带来其他开销,例如查询限制和每个查询更多的联接等。

如果对表进行非规范化,则可以使用数据过滤器策略(我认为只有休眠支持)。但是现在您将所有内容都放在一个类中,这可能是一个更大的问题。

由于您使用的是REST,因此您可能希望满足/ api / vehicles / 1(更正了我的要求)

对于这种情况,使用其中包含“类型”的“车辆”表更容易执行此操作。您可以使用杰克逊序列化器来省略所有非空组件。因此,在汽车的情况下,将输入车辆属性和汽车参数,但将忽略卡车,公共汽车等上的空值。