mappedBy跟JoinColumn/JoinTable

对于mappedBy复习下:

a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
c) mappedBy的含义,应该理解为,拥有方能够自动维护 跟被拥有方的关系;
   当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。

d) mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被 拥有方。mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表

 


人跟身份证双向关联

在Person 里面定义的注解:

@OneToOne(cascade={CascadeType.ALL},optional=true)
public IDCard getIdCard() {
         return idCard;
}

在IDCard 里面定义的注释:
@OneToOne(cascade=CascadeType.ALL,mappedBy="idCard" , optional=false)
public Person getPerson() {
       return person;
}
多了一个mappedBy这个方法,它表示什么呢?它表示当前所在表和Person的关系是定义在Person里面的idCard这个成员上面的,它表示此表是一对一关系中的从表,也就是关系是在person表里面维护的 ,这一点很重要 . Person表是关系的维护者,owner side,有主导权,它有个外键指向IDCard。
我们也可以让主导权在IDCard上面,也就是让它产生一个指向Person的外键,这也是可以的,但是最好是让Person来维护整个关系,这样更符合我们正常的思维 .

我们也可以看到在Person里面IDCard是注释是optional=true,也就是说一个人是可以没有身份证的,但是一个身份证不可以没有人,所以在IDCard里面注释person的时候,optional就为false了,这样就可以防止一个空的身份证记录进数据库.

`@JoinTable` 注解用于定义两个实体类之间的多对多关系,并且指定用于关系维护的中间表的细节。 以下是 `@JoinTable` 注解的一些常用属性: - `name`:指定用于关系维护的中间表的名称。 - `joinColumns`:指定关系维护方的外键列的细节,包括列名、引用的列名等。 - `inverseJoinColumns`:指定关系被维护方的外键列的细节,包括列名、引用的列名等。 以下是一个使用 `@JoinTable` 注解的多对多关系的示例: ``` @Entity public class Student { @Id private Long id; @ManyToMany @JoinTable(name = "student_course", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "course_id")) private Set<Course> courses = new HashSet<>(); // getters and setters } @Entity public class Course { @Id private Long id; @ManyToMany(mappedBy = "courses") private Set<Student> students = new HashSet<>(); // getters and setters } ``` 在这个示例中,我们创建了两个实体类 `Student` 和 `Course`,它们之间是多对多关系。我们使用 `@JoinTable` 注解来定义中间表,指定中间表的名称为 `student_course`,关系维护方的外键列为 `student_id`,关系被维护方的外键列为 `course_id`。 在 `Student` 实体类中,我们使用 `@ManyToMany` 和 `@JoinTable` 注解来定义多对多关系,并将多对多关系映射到 `courses` 属性中。 在 `Course` 实体类中,我们使用 `@ManyToMany(mappedBy = "courses")` 注解来定义多对多关系,并指定 `mappedBy = "courses"`,表示多对多关系的映射属性为 `courses`。 通过使用 `@JoinTable` 注解,我们可以方便地定义多对多关系,并指定用于关系维护的中间表的细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值