我开始通过阅读一本书来研究JPA,他们给出了一个单向映射,如下所示:
表 车辆
(vehicleId, brand, model, dev_year, extraId)
vehicleId 是PK, extraId 是FK
表 travel_extra
(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 表中并链接到车辆的主键表。但是,当我这样做时,代码不起作用,无论我尝试做什么,我都无法使其工作。
如果有人经历过这样的事情,我会很高兴能得到一些帮助以及如何让它成功的例子。
提前致谢。
答案 0 :(得分:1)
尝试使用@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;
...
}
答案 1 :(得分:0)
您不需要参考VehicleExtra信息(id)来提高您的Vehicle类,因为Vehicle完全独立于VehicleExtra,所以只有VehicleExtra才需要了解Vehicle。