我的数据库有一个表,它表示一堆其他事物之间的公共字段。因此,假设有一个像Vehicle
这样的表,然后Vehicle
具有VIN,颜色,类型...
然后还有其他表,如Car
和Truck
,当Vehicle
上的"类型"是"car"时,我们想查看Car
表以查找其他属性。也许是关于燃油效率和乘客数量的东西。当类型是"卡车"时,我们想知道关于卡车的事情,比如负载能力或其他什么。
你如何模拟这样的东西?您是否将Vehicle
嵌入到所有其他类型中?有没有办法在"类型"字段中有条件地在表之间做@OneToOne
?
如果你想遵循真正的ORM方式,你可以使用MappedSuperClass或JoinedTable策略。但这是有代价的。这些策略还有其他开销,例如查询限制和每个查询的更多联接等。
如果对表进行非规范化,则可以使用数据过滤器策略(我认为仅支持休眠(。但是现在你在一个类中拥有所有内容,这可能是一个更大的问题。
由于您使用的是 REST,因此您可能希望迎合/api/vehicles/1(请纠正我(
对于此类场景,使用包含"类型"的"车辆"表更容易执行此操作。可以使用 jackson 序列化程序省略所有非 null 组件。因此,在汽车的情况下,车辆属性和汽车参数将进入,但卡车、公共汽车等上的空值将被省略。