我正在学习 Hibernate,并遇到了术语 Owning-side
和 Non-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,那么这些实体User
和Vehicle
都会成为拥有方
实体吗?
我无法理解为什么仅放置@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 实体的 foreignKey 为 userId
,那么 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/