繁体   English   中英

JPA :一张表带主键,另一张表带主键和外键

[英]JPA : one table with primary key and another table with primary and foreign key

我通过阅读一本书开始学习 JPA,他们给出了一个单向映射,如下所示:

(vehicleId, brand, model, dev_year, extraId) 

vehicleIdPK,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) ,并创建一个vehicleIDTravelExtra表。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM