这里有两个类,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>
原文:http://my.oschina.net/u/2328736/blog/513254