mappedBy:
1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
2>mappedBy标签一定是定义在被拥有方的,他指向拥有方;
3>mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的;
4>mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。
5.地址指向谁,谁就是弱势方,即双向时,为了避免递归调用,需要定义主导权的问题,指向的就是不具有主导权的一方,是被拥有方,而另一方会自动维护,作为该方的属性时无法继续向更深层次递归调用。
树状结构
1.2树状结构的设计(重要)
设计思想:数据库模型,面向对象模式,关系映射,CRUD
数据库模型:表(id,name,pid)
实体模型:父结点一对多子结点,一对多/多对一双向关联映射,一个子结点只有一个父结点,一个父结点有多个子结点.
Class Org
private int id;
private String name;
private Set<Org> children = new HashSet<Org>();
private Org parent;
关系映射:在同一个类中使用@ManyToOne和@OneToMany
在父结点parent上
@ManyToOne
@JoinColumn(name="parent_id")
public Org getParent() {
return parent;
}
在子结点children上
@OneToMany(cascade=CascadeType.ALL, mappedBy="parent")//mappedBy指parent属性为关系的维护者,具有主导权,
关系是在指向的属性上建立的,即该不用管理该属性对应生成的设置
public Set<Org> getChildren() {
return children;
}