在配置注解的时候,由于在用户和网站之前,用户是主控方,网站是被控方。所以我在Sysuser类的getWebsite()方法上加了下面一段内容进行注解。
@ManyToMany(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST,CascadeType.MERGE}) @JoinTable(name="user_web",joinColumns=@JoinColumn(name="userid"), inverseJoinColumns=@JoinColumn(name="webid")) public Set<Website> getWebsite() { return website; } public void setWebsite(Set<Website> website) { this.website = website; }
在Website类的getSysuser()方法上加了下面一段内容进行注解
@ManyToMany(cascade={CascadeType.MERGE,CascadeType.PERSIST},mappedBy="website") public Set<Sysuser> getSysuser() { return sysuser; } public void setSysuser(Set<Sysuser> sysuser) { this.sysuser = sysuser; }
总结一下需要注意的几点:
1、只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
2、mappedBy标签一定是定义在the owned side(被控方,或者叫被拥有方),他指向the owning side(主控方,或者叫做拥有方);
3、mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。
Hibernate annotation多对多相关要点总结,布布扣,bubuko.com
原文:http://blog.csdn.net/hbxfyxw/article/details/20473521