您的位置:首页 > 其它

many-to-many 多对多关联

2017-08-22 10:47 127 查看
多对多关联 是一种常用的表(A)与表(B)之间的关联,多条数据对应多条数据,这样我们就使用一个关系表来关联A表和B表的数据,关联表中一般是放入A表和B表中的主键,所以创建两表中的***.hbm.xml必须要加:

<set name="当A表的关联属性"  table="关联表表名"  inverse="true">
<key>
<column name="关联表的列名(最好是和A表的主键名相同)" />
</key>
<many-to-many class="B表的地址" column="关联表关联的B表的列名"/>
</set>
例子:项目和参加人员的关联

TPerson.java(A表的创建类)

public class TPerson {
private String personID;
private String personName;
private String personDesc;
private Set projectSet = new HashSet();//关联属性
public String getPersonID() {
return personID;
}
public void setPersonID(String personID) {
this.personID = personID;
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
public String getPersonDesc() {
return personDesc;
}
public void setPersonDesc(String personDesc) {
this.personDesc = personDesc;
}
public Set getProjectSet() {
return projectSet;
}
public void setProjectSet(Set projectSet) {
this.projectSet = projectSet;
}

}

TProject.java(B表的创建类)

public class TProject {

private String projectId;
private String projectName;
private String projectDesc;
private Set personSet = new HashSet(); 关联属性
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectDesc() {
return projectDesc;
}
public void setProjectDesc(String projectDesc) {
this.projectDesc = projectDesc;
}
public Set getPersonSet() {
return personSet;
}
public void setPersonSet(Set personSet) {
this.personSet = personSet;
}

}
TPerson.hbm.xml(A表的配置文件)

<hibernate-mapping>
<class name="com.tjtc.test.TPerson" table="t_person" >
<id name="personID" column="t_person_id">
<generator class="assigned" />
</id>
<property name="personName" type="java.lang.String">
<column name="t_person_name" length="30" />
</property>
<property name="personDesc" type="java.lang.String">
<column name="t_person_desc" length="50" />
</property>
<set name="projectSet" table="r_project_person" >
<key>
4000

<column name="r_person_id" />
</key>
<many-to-many class="com.tjtc.test.TProject" column="r_project_id"/>
</set>
</class>
</hibernate-mapping>

TProject.hbm.xml(B表的配置文件)

<hibernate-mapping>
<class name="com.tjtc.test.TProject" table="t_project" >
<id name="projectId" column="t_project_id">
<generator class="assigned" />
</id>
<property name="projectName" type="java.lang.String">
<column name="t_project_name" length="40" />
</property>
<property name="projectDesc" type="java.lang.String">
<column name="t_project_desc" length="50" />
</property>
<set name="personSet"  table="r_project_person"  inverse="true">
<key>
<column name="r_project_id" />
</key>
<many-to-many class="com.tjtc.test.TPerson" column="r_person_id"/>
</set>
</class>
</hibernate-mapping>

要记住必须在hibernate.cfg.xml中添加这两配置文件的映射:

<mapping resource="com/tianheng/test/TPerson.hbm.xml" />
<mapping resource="com/tianheng/test/TProject.hbm.xml" />
这样就可以实现两个表之间实现多对多的关联
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: