在實(shí)際開發(fā)中,多對(duì)多雙向表會(huì)盡量避免而無(wú)法完全避免,一旦遇到這個(gè)情況時(shí)hibernate的映射方法如下
舉個(gè)例子:
多對(duì)多雙向關(guān)聯(lián)
關(guān)系舉例:老師<-->學(xué)生,老師需要知道自己教了哪些學(xué)生,學(xué)生也知道自己有哪些老師.
數(shù)據(jù)庫(kù):中間表
Annotation:@ManyToMany
XML:<many-to-many>
多對(duì)多單向配置只需要在一端進(jìn)行配置就可以了,雙向需要配置兩端.
關(guān)系模型(Teache多對(duì)多Student)
Teacher(id,name,students)多
Set<Student> students=new HashSet<Student>()
Student(id,name,teachers)多
Set<Teacher> teachers = new HashSet<Teacher>();
Annotation配置
在Teacher這一端的students上配置
//如果手動(dòng)指定生成的中間表的表名和字段名
@ManyToMany
@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="teacher_id")},
inverseJoinColumns={@JoinColumn(name="student_id")}
)
在Student一端的teachers只需要配置
@ManyToMany(mappedBy="students")
XML配置方式:兩端配置一樣,注意表名和生成的中間表的字段屬性名要一致
Teacher那一端配置
<set name="students" table="t_s">
<key column="teacher_id"/>
<many-to-many class="com.xxx.Student" column="student_id"/>
</set>
在Student那一端配置
<set name="teachers" table="t_s">
<key column="student_id"></key>
<many-to-many class="com.xxx.Teacher" column="teacher_id"/>
</set>
生成的表為
create table Student (
id integer not null auto_increment,
name varchar(255),
primary key (id)
)
create table Teacher (
id integer not null auto_increment,
name varchar(255),
primary key (id)
)
create table t_s (//生成的中間表
teacher_id integer not null,
student_id integer not null,
primary key (teacher_id, student_id)
)
t_s表的兩個(gè)屬性分別references其它表的主鍵.
t_s(teacher_id, student_id)為中間表,ID策略為聯(lián)合主鍵
@orderby(value="id")
posted on 2011-04-19 19:52
林齊磊花 閱讀(1370)
評(píng)論(0) 編輯 收藏