[英]JPA Composite Key for one Table and a Primary Key for another Table - Possible?
[英]JPA : one table with primary key and another table with primary and foreign key
我通过阅读一本书开始学习 JPA,他们给出了一个单向映射,如下所示:
桌车
(vehicleId, brand, model, dev_year, extraId)
vehicleId是PK,extraId是FK
表旅行_额外
(id, allowSmoke, allowFood, allowDrinks, airConditioner)
id是 PK
然后是java对象:
public class Vehicle {
@Id
private long vehicleId;
private String brand;
private String model;
@OneToOne
@JoinColumn(name = "vehicleId")
private TravelExtra travelExtra;
}
public class TravelExtra {
@Id
private id;
private boolean allowSmoke;
private boolean allowFood;
private boolean allowDrinks;
private boolean airConditioner;
}
当我坚持并提交事务时,它就像一个魅力。
然而! 就我而言,我不希望车辆表具有外键,但我希望外键位于travel_extra表中并链接到车辆表的主键。 但是当我这样做时,代码不起作用,无论我尝试做什么,我都无法使其工作。
如果有人曾经经历过这样的事情,我会很高兴得到一些帮助和如何使它起作用的例子。
提前致谢。
试着用@JoinColumn(name = "vehicleId", insertable = false, updateable = false)
,并创建一个vehicleID
列TravelExtra
表。 insertable = false, updateable = false
应该指示 ORM 在目标表中查找列。
编辑
我的参考是this ,它指出:
在 JPA 中,JoinColumn 定义了一个可插入和可更新的属性,这些属性可用于指示 JPA 提供者外键实际上在目标对象的表中
如果它不起作用(因为规范不保证),您可以使关系双向(只需在TravelExtra
实体中添加映射,无需进一步更改数据库)
public class Vehicle {
...
@OneToOne(mappedBy = "vehicle", cascade = CascadeType.ALL)
private TravelExtra travelExtra;
...
}
public class TravelExtra {
...
@OneToOne
@JoinColumn(name = "vehicleId")
private Vehicle vehicle;
...
}
您不需要参考 VehicleExtra 信息(id)来扩充您的 Vehicle 类,因为 Vehicle 完全独立于 VehicleExtra,只有 VehicleExtra 需要知道 Vehicle。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.