这里有两个类,Employee和Company,他们是多对多的关系,在数据库中的表分别是 t_employee 和 t_company ,中间表的字段是e_id和c_id,分别以t_employee的主键和t_company的主键作为外键。
package com.hibernate.many2many.entity;
import java.util.HashSet;
import java.util.Set;
public class Employee {
private Integer id;
private String name;
private Set<Company> companies = new HashSet<Company>();//多对多关系
public Employee() {
super();
}
public Employee(String name, Set<Company> companies) {
super();
this.name = name;
this.companies = companies;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Company> getCompanies() {
return companies;
}
public void setCompanies(Set<Company> companies) {
this.companies = companies;
}
}
package com.hibernate.many2many.entity;
import java.util.HashSet;
import java.util.Set;
public class Company {
private Integer id;
private String name;
private String address;
private Set<Employee> employees = new HashSet<Employee>();//多对多关系
public Company() {
super();
}
public Company(String name, String address) {
super();
this.name = name;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
}
映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hibernate.many2many.entity.Employee" table="t_employee">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string"></property>
<!-- 多对多关系,key是中间表的外键, inverse="true"表示由对方维护-->
<set name="companies" table="t_company" inverse="true">
<key column="e_id"></key>
<many-to-many class="com.hibernate.many2many.entity.Company" column="c_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hibernate.many2many.entity.Company" table="t_company">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string"></property>
<property name="address" type="string"></property>
<!-- 多对多关系,key是中间表的外键 -->
<set name="employees" table="t_employee" cascade="all">
<key column="c_id"></key>
<many-to-many class="com.hibernate.many2many.entity.Employee" column="e_id"></many-to-many>
</set>
</class>
</hibernate-mapping>