我正在学习hibernate并试图了解如何建立两个实体之间的关系(OneToOne
、OneToMany
、ManyToMany
)。考虑一个简单的场景:
用户实体:
@Entity
class User {
@Id
private userId;
private Vehicle vehicle;
// other code
}
车辆实体:
@Entity
public class Vehicle {
@Id
private int vehicleId;
private String desc;
// other code
}
我的目标是指定:
用户
和车辆
实体之间的一对多关系
或一对一
关系。
我知道有 OneToOne
、 OneToMany
注释,但我无法理解这种关系是如何解释的?它取决于另一个实体放置在哪个实体中吗?
例如:
@Entity
class User {
@Id
private userId;
private Vehicle vehicle;
// other code
}
正如我们所看到的,我已将 Vehicle
实体放置在 User
实体内,并且如果我在 之上使用
实体,是否表示 OneToMany
注释>VehicleUser
-> Vehicle
实体之间的 1:M 关系。
谁能帮我理解这个?
最佳答案
我将以此作为更好地解释的答案,但请记住,这些实际上是 hibernate 映射的基础,您可能可以在任何在线教程中阅读它们。
用户表为:
userId userName etc
车辆表是
vehicleId userIdFK etc
这是一种明显的一对多关系:一个用户多个车辆。
要映射您所拥有的这种关系
@Entity
class User {
@Id
private userId;
private String userName
// other code
}
和
@Entity
pubic class Vehicle {
@Id
private int vehicleId;
private String desc;
@ManyToOne
@JoinColumn(name = "userIdFK", referencedColumnName = "userId")
private User user;
// other code
}
这就是所谓的单向映射,您只需让 hibernate 了解数据库上 FK 的存在即可
@ManyToOne 指定关系类型(一辆车属于一个用户)
而 @JoinColumn 用于表示“嘿,hibernate Vehicle 表对 User 表有一个 FK”,名称和referencedColumnName 是 Fk 中涉及的数据库列名称。
如果您愿意,您可以将中继设置为双向,这有时很有用,您可以从关联的非拥有方添加引用(在本例中是从用户到车辆),这样您就可以从两个类到另一个类
@Entity
class User {
@Id
private userId;
private String userName
@OneToMany(mappedBy = "user")
private List<Vehicle> vehicleList;
// other code
}
MappedBy 必须指定映射关系的其他字段
关于hibernate - 如何读取Hibernate中实体之间的一对多或多对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944041/