我正在学习休眠并试图了解如何建立两个实体之间的关系(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
实体中,如果我在OneToMany
实体上使用Vehicle
注释,它是否意味着User
- > 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了解db上FK的存在
@ManyToOne指定关系类型(一个车辆是一个用户)
虽然@JoinColumn用于说“hey hibernate Vehicle table有一个FK朝向User表”,其名称和referencedColumnName是Fk中涉及的db列名。
如果你想要你可以将继承作为双向进行,这有时会在你从关联的非拥有方(在这种情况下从用户到车辆)添加引用时很有用,这样你就可以从两个类到另一个类
@Entity
class User {
@Id
private userId;
private String userName
@OneToMany(mappedBy = "user")
private List<Vehicle> vehicleList;
// other code
}
MappedBy必须指定映射关系的其他字段