我正在学习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
实体中,如果我在OneToMany
实体顶部使用Vehicle
注释,它是否意味着1 :User
- >之间的M关系Vehicle
实体。
任何人都可以帮我理解这个吗?
答案 0 :(得分:2)
我将这个答案更好地解释,但请记住,这些是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必须指定映射关系的其他字段