什么是 OneToMany 和 ManyToOne?#
- OneToMany(一对多):一个东西可以对应多个另一个东西,比如一个用户有多个好友关系
- ManyToOne(多对一):多个东西对应一个东西,比如多个好友关系都属于同一个用户
用好友关系举例理解#
1. 用户实体(One 方)#
@Entity
data class User {
@Id
var id: Long? = null
var username: String = ""
// 一个用户有多个好友关系,mappedBy 指向关联的属性名
@OneToMany(mappedBy = "user")
var friendRelations: List<Friendship> = emptyList()
}
2. 好友关系实体(Many 方)#
@Entity
data class Friendship {
@Id
var id: Long? = null
// 多个好友关系属于一个用户,@JoinColumn 定义外键列
@ManyToOne
@JoinColumn(name = "user_id")
var user: User? = null
var friendId: Long = 0
}
核心配置一句话解释#
- @OneToMany:放在 “一” 的那一方,告诉 JPA 这个东西可以有多个关联对象
- mappedBy = “user”:表示关联关系由对方(Friendship)的 user 属性维护
- @ManyToOne:放在 “多” 的那一方,表示这个东西属于另一个东西
- @JoinColumn(name = “user_id”):在数据库表中创建 user_id 列作为外键