如何读取 Hibernate 中实体之间的 OneToMany 或 ManyToOne 关系?
How to read OneToMany or ManyToOne relationship between entities in Hibernate?
我正在学习 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
}
我的目标是指定:
One to Many relationship
或 One to one
User
和 Vehicle
实体之间的关系。
我知道有 OneToOne
, OneToMany
注释,但我不明白这种关系是如何解释的?它取决于另一个实体放置在哪个实体中吗?
例如:
@Entity
class User {
@Id
private userId;
private Vehicle vehicle;
// other code
}
如我们所见,我已将 Vehicle
实体置于 User
实体内,如果我在 Vehicle
实体之上使用 OneToMany
注释,是否表示 User
-> Vehicle
实体之间的 1:M 关系。
谁能帮我理解一下?
我会把这个作为一个答案来更好地解释,但请记住,这些实际上是休眠映射的基础,您可以在任何在线教程中阅读它们。
用户 table 是:
userId userName etc
和车辆 table 是
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 知道 db 上存在 FK
@ManyToOne 指定关系类型(一车一用户)
而@JoinColumn 用于表示 "hey hibernate Vehicle table has a FK towards User table" 名称和 referencedColumnName 是 Fk 中涉及的数据库列名称。
如果你愿意,你可以将中继关系设置为双向,这有时在你从关联的非拥有方(在本例中是从用户到车辆)添加引用时很有用,这样你就可以从两者获得 class 给另一个
@Entity
class User {
@Id
private userId;
private String userName
@OneToMany(mappedBy = "user")
private List<Vehicle> vehicleList;
// other code
}
MappedBy 必须指定映射关系的其他字段
我正在学习 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
}
我的目标是指定:
One to Many relationship
或 One to one
User
和 Vehicle
实体之间的关系。
我知道有 OneToOne
, OneToMany
注释,但我不明白这种关系是如何解释的?它取决于另一个实体放置在哪个实体中吗?
例如:
@Entity
class User {
@Id
private userId;
private Vehicle vehicle;
// other code
}
如我们所见,我已将 Vehicle
实体置于 User
实体内,如果我在 Vehicle
实体之上使用 OneToMany
注释,是否表示 User
-> Vehicle
实体之间的 1:M 关系。
谁能帮我理解一下?
我会把这个作为一个答案来更好地解释,但请记住,这些实际上是休眠映射的基础,您可以在任何在线教程中阅读它们。
用户 table 是:
userId userName etc
和车辆 table 是
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 知道 db 上存在 FK
@ManyToOne 指定关系类型(一车一用户)
而@JoinColumn 用于表示 "hey hibernate Vehicle table has a FK towards User table" 名称和 referencedColumnName 是 Fk 中涉及的数据库列名称。
如果你愿意,你可以将中继关系设置为双向,这有时在你从关联的非拥有方(在本例中是从用户到车辆)添加引用时很有用,这样你就可以从两者获得 class 给另一个
@Entity
class User {
@Id
private userId;
private String userName
@OneToMany(mappedBy = "user")
private List<Vehicle> vehicleList;
// other code
}
MappedBy 必须指定映射关系的其他字段