hibernate annotation MappedBy

a)只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;

b)mappedBy标签一定是定义在theownedside(被拥有方的),他指向theowningside(拥有方);

c)mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系;

当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。

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

人跟身份证双向关联

在Person里面定义的注解:

@OneToOne(cascade={CascadeType.ALL},optional=true)

publicIDCardgetIdCard(){

returnidCard;

}

在IDCard里面定义的注释:

@OneToOne(cascade=CascadeType.ALL,mappedBy="idCard",optional=false)

publicPersongetPerson(){

returnperson;

}

多了一个mappedBy这个方法,它表示什么呢?它表示当前所在表和Person的关系是定义在Person里面的idCard这个成员上面的,它表示此表是一对一关系中的从表,也就是关系是在person表里面维护的,这一点很重要.Person表是关系的维护者,ownerside,有主导权,它有个外键指向IDCard。

我们也可以让主导权在IDCard上面,也就是让它产生一个指向Person的外键,这也是可以的,但是最好是让Person来维护整个关系,这样更符合我们正常的思维.

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

相关推荐