gpt4 book ai didi

java - Hibernate:我们可以在双方都是拥有方的实体之间建立关系吗?

转载 作者:行者123 更新时间:2023-11-30 06:21:57 25 4
gpt4 key购买 nike

我正在学习 Hibernate,并遇到了术语 Owning-sideNon-owing side

读完后,我知道Owning-side是指对另一个实体有FK引用的实体。

考虑以下场景:

用户实体:

@Entity
public class User {
@Id
private int userId;
private String userName;

@OneToOne
@JoinColumn("VEHICLE_ID")
private Vehicle vehicle;
// other code
}

车辆实体:

@Entity
public class Vehicle{
@Id
private int vehicleId;
private String vehicleName;

@OneToOne
@JoinColumn("USER_ID")
private User user;
// other code
}

如果我在这两个实体中保留@JoinColumn,那么这些实体UserVehicle都会成为拥有方实体吗?

我无法理解为什么仅放置@JoinColumn注释就会使实体成为拥有方实体。

谁能帮我理解一下吗?

最佳答案

If I keep the @JoinColumn in both these Entities, then would both these entities User and Vehicle become owning-side entities?

我们不会首先在实体中使用@JoinColumn,然后声明该特定实体是拥有实体。事实上恰恰相反。
我们首先决定哪个实体应该是拥有实体,哪个实体应该是非拥有实体。
我们通过查看哪个实体具有外键引用来决定。这又更多的是一种设计选择。具有外键引用的实体被称为拥有实体
然后,我们在所属实体中使用 @JoinColumn 注解来指定外键。
在非拥有方,我们在特定关联类型内部使用 mappedBy 属性。

在您的示例中,您指定了双向关系。因此,如果我们认为 Vehicle 实体的 foreignKeyuserId,那么 Vehicle 实体将是我们的拥有实体,我们用“@JoinColumn”注释此“userId”。 @JoinColumn 的字段:

@Entity
public class User {
@Id
private int userId;
private String userName;

@OneToOne(mappedBy="user")
private Vehicle vehicle;
// other code
}


@Entity
public class Vehicle{
@Id
private int vehicleId;
private String vehicleName;

@OneToOne
@JoinColumn("USER_ID")
private User user;
// other code
}

Here是一个详细的文档,可以帮助您作为引用:

JPA API 引用文档还为不同的关联类型提供了很好的简短描述:OneToOne , OneTomany , ManyToMany

关于java - Hibernate:我们可以在双方都是拥有方的实体之间建立关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47963182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com