题目
在@Many注解中,用于指定关联属性的值的属性是____。
在@Many注解中,用于指定关联属性的值的属性是____。
题目解答
答案
在`@Many`注解中,用于指定关联属性的值的属性是`mappedBy`。`mappedBy`属性通常在双向关联的实体类中使用,它指定了拥有关联关系的另一方类中的属性名,表示这个关系由对方类的哪个属性来维护。这样可以建立起双向关联关系,而不会产生多余的外键。
解析
考查要点:本题主要考查JPA(Java Persistence API)中@Many类型注解(如@OneToMany、@ManyToMany)的属性mappedBy的作用和使用场景。
解题核心思路:
在JPA的双向关联关系中,mappedBy属性用于指定关联关系的维护方。当两个实体类之间存在双向关联时,必须明确哪一方是关联关系的拥有方(owning side),哪一方是被映射方(mapped side)。mappedBy的作用是告诉JPA,当前实体的关联属性由另一方的某个属性维护,从而避免重复创建外键列。
破题关键点:
- 双向关联关系:例如
@OneToMany与@ManyToOne的组合,或@ManyToMany的双向映射。 mappedBy的作用:指定关联关系的维护方,确保外键列只在维护方对应的表中生成。
在JPA中,@Many类型的注解(如@OneToMany、@ManyToMany)通常用于表示“多”的一方。当处理双向关联关系时,需要明确关联关系的维护方。例如:
-
假设实体类
Blog和Comment是双向关联关系:Blog类有一个Set<Comment> comments属性,表示一个博客有多个评论。Comment类有一个Blog blog属性,表示一个评论属于某个博客。
-
配置关联关系:
- 在
Blog类的comments属性上使用@OneToMany(mappedBy = "blog"),表示关联关系由Comment类的blog属性维护。 - 在
Comment类的blog属性上使用@ManyToOne,无需mappedBy,因为它是维护方。
- 在
-
mappedBy的作用:- 通过
mappedBy,JPA知道外键应存储在Comment表中(对应blog属性),而不是在Blog表中生成多余的外键列。 - 如果不使用
mappedBy,会导致双向关联无法正确映射,甚至生成冗余的外键。
- 通过