Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 在多个实体之间使用@MapsId进行一对一映射_Hibernate_Nhibernate Mapping - Fatal编程技术网

Hibernate 在多个实体之间使用@MapsId进行一对一映射

Hibernate 在多个实体之间使用@MapsId进行一对一映射,hibernate,nhibernate-mapping,Hibernate,Nhibernate Mapping,我有3个类,它们之间有一对一的关联。使用hibernate,我试图 使用@MapsId注释在这些类之间进行映射,如下文所述(顺便说一句,这是一篇很棒的文章): 但问题在于我发现的大多数文章中给出的示例,仅适用于两个实体,而不适用于更多实体(这是我的情况) 在Driver类和Destination类之间使用@MapsId,如果我创建一个新的驱动程序,它的标识符将与Destination的标识符相同;它将扮演驱动程序的PK和引用目标类的FK的角色 但是关于Vehicle类,我不能在它和Driver之

我有3个类,它们之间有一对一的关联。使用hibernate,我试图 使用@MapsId注释在这些类之间进行映射,如下文所述(顺便说一句,这是一篇很棒的文章):

但问题在于我发现的大多数文章中给出的示例,仅适用于两个实体,而不适用于更多实体(这是我的情况)

在Driver类和Destination类之间使用@MapsId,如果我创建一个新的驱动程序,它的标识符将与Destination的标识符相同;它将扮演驱动程序的PK和引用目标类的FK的角色

但是关于Vehicle类,我不能在它和Driver之间使用@MapsId,所以我可以做些什么来确保最佳的映射性能。有什么建议吗


注:我知道我可以有一个结合目的地和车辆信息的类,这将解决问题,但我需要将这些类分开,因为我想对这两个类执行一些CRUD操作。

我不确定我看到了问题所在

@Entity
public class Driver {
    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

@Entity
public class Destination {
    @Id
    Long id;

    @OneToOne
    @MapsId
    Driver driver;

@Entity
public class Vehicle {
    @Id
    private Long id;

    @OneToOne
    @MapsId
    Driver driver;
它使用单个键创建表

Hibernate: create table Destination (driver_id bigint not null, primary key (driver_id))
Hibernate: create table Driver (id bigint generated by default as identity (start with 1), primary key (id))
Hibernate: create table Vehicle (driver_id bigint not null, primary key (driver_id))
Hibernate: alter table Destination add constraint FK1ndeqobn3ki4y7js6twsbn4kv foreign key (driver_id) references Driver
Hibernate: alter table Vehicle add constraint FKgoiw2f7ekq0ja5xtwpfnpxn47 foreign key (driver_id) references Driver
如果您希望在性能方面保持谨慎,则需要远离双向映射。您可以使用它们,但一定要转储SQL,以便了解发生了什么。您甚至可以映射
车辆
目的地
之间的双向关联,但Hibernate将再次生成各种额外的查询。最好让它保持简单,自己查询你需要什么