映射注解分组
所有Annotation
形式的映射元数据都位于@javax.persistence
包里面,可以按两个正交的维度进行分组:
- 从
O/R
的维度,可划分为针对类的逻辑注解和针对数据库的物理注解; - 从粒度维度,可划分为装对类/表的注解和针对属性/列的注解。
以上两个正交的维度将映射注解划分为四个象限,举例如下:
逻辑映射 | 物理映射 | |
---|---|---|
类/表级映射 | @Entity @Embeddable @MappedSuperclass ... |
@Table @CollectionTable @JoinTable ... |
属性/列级映射 | @Basic @ManyToOne @Id @ElementCollection @AttributeOverride @Embedded ... |
@Column @JoinColumn @OrderColumn ... |
属性/列级的注解(包括逻辑注解和物理注解),又可以根据三个正交的维度进行分组:
- 从
O/R
的维度分组,可划分为针对类属性的逻辑注解和针对数据库列的物理注解; - 从属性类型的维度分组,可划分针对值(简单值或值对象)类型属性的注解和针对关联(实体)类型属性的注解;
- 从属性基数的维度分组,可划分为针对单值类型属性的注解和针对多值(
List、Set、Map、Collection
、数组等)类型属性的注解。
以上三个正交的维度将属性/列级的映射注解划分为六个象限(多值属性没有对应的物理映射注解),举例如下:
单值 | 多值 | ||
---|---|---|---|
逻辑映射 | 物理映射 | 逻辑映射 | |
值属性 (Attribute) |
@Basic @Embedded @Id @Version |
@Column | @ElementCollection |
关联属性 (Association) |
@OneToOne @ManyToOne |
@JoinColumn | @OneToMany @ManyToMany |