Hibernate 在多个实体之间使用@MapsId进行一对一映射
我有3个类,它们之间有一对一的关联。使用hibernate,我试图 使用@MapsId注释在这些类之间进行映射,如下文所述(顺便说一句,这是一篇很棒的文章): 但问题在于我发现的大多数文章中给出的示例,仅适用于两个实体,而不适用于更多实体(这是我的情况) 在Driver类和Destination类之间使用@MapsId,如果我创建一个新的驱动程序,它的标识符将与Destination的标识符相同;它将扮演驱动程序的PK和引用目标类的FK的角色 但是关于Vehicle类,我不能在它和Driver之间使用@MapsId,所以我可以做些什么来确保最佳的映射性能。有什么建议吗Hibernate 在多个实体之间使用@MapsId进行一对一映射,hibernate,nhibernate-mapping,Hibernate,Nhibernate Mapping,我有3个类,它们之间有一对一的关联。使用hibernate,我试图 使用@MapsId注释在这些类之间进行映射,如下文所述(顺便说一句,这是一篇很棒的文章): 但问题在于我发现的大多数文章中给出的示例,仅适用于两个实体,而不适用于更多实体(这是我的情况) 在Driver类和Destination类之间使用@MapsId,如果我创建一个新的驱动程序,它的标识符将与Destination的标识符相同;它将扮演驱动程序的PK和引用目标类的FK的角色 但是关于Vehicle类,我不能在它和Driver之
注:我知道我可以有一个结合目的地和车辆信息的类,这将解决问题,但我需要将这些类分开,因为我想对这两个类执行一些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将再次生成各种额外的查询。最好让它保持简单,自己查询你需要什么