Hibernate中的Many-to-Many篇
Hibernate配置文件中many-to-many set字段的属性说明:
属性 | 用法 | 举例 |
name | 映射的属性 | name="name" |
table | 映射的数据库表 | name="Person_Orgnization" |
lazy | 延迟加载 | lazy=true|false |
cascade | 级联操作 | cascade=all |
inverse | 关联由谁维护 | inverse=true |
表结构关系:
Person(id)-->Person_Orgnization(pid,oid)-->Orgnization(id)
xml文件:
Person.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class catalog="mysql" name="com.bintang.web.system.po.Person" table="person"> <id name="id" type="java.lang.Integer"> <column name="id"/> <generator class="native"/> </id> <property generated="never" lazy="false" name="name" type="java.lang.String"> <column length="30" name="name"/> </property> <property generated="never" lazy="false" name="password" type="java.lang.String"> <column length="32" name="password"/> </property> <property generated="never" lazy="false" name="age" type="java.lang.Integer"> <column name="age"/> </property> <property generated="never" lazy="false" name="phone" type="java.lang.String"> <column length="15" name="phone"/> </property> <property generated="never" lazy="false" name="sex" type="java.lang.String"> <column length="1" name="sex"/> </property> <property generated="never" lazy="false" name="address" type="java.lang.String"> <column length="200" name="address"/> </property> <property generated="never" lazy="false" name="account" type="java.lang.String"> <column length="20" name="account"/> </property> <property generated="never" lazy="false" name="leader" type="java.lang.Integer"> <column name="leader"/> </property> <set name="orgs" table="Person_Orgnization"> <key column="pid"/> <many-to-many class="com.bintang.web.system.po.Orgnization" column="oid"/> </set> </class> </hibernate-mapping>
Orgnization.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class catalog="mysql" name="com.bintang.web.system.po.Orgnization" table="orgnization"> <id name="id" type="java.lang.Integer"> <column name="id"/> <generator class="native"/> </id> <property generated="never" lazy="false" name="name" type="java.lang.String"> <column length="20" name="name"/> </property> <property generated="never" lazy="false" name="level" type="java.lang.Integer"> <column name="level"/> </property> <property generated="never" lazy="false" name="sn" type="java.lang.String"> <column length="100" name="sn"/> </property> <set name="Persons" table="person_orgnization"> <key column="oid"/> <many-to-many class="com.bintang.web.system.po.Person" column="pid"/> </set> </class> </hibernate-mapping>
JAVA代码:
Person.java
package com.bintang.web.system.po;
import java.util.HashSet;
import java.util.Set;
/**
* Person entity. @author MyEclipse Persistence Tools
*/
public class Person implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private String password;
private Integer age;
private String phone;
private String sex;
private String address;
private String account;
private Integer leader;
private Set<Orgnization> orgs = new HashSet<Orgnization>();
// Constructors
/** default constructor */
public Person() {
}
/** full constructor */
public Person(String name, String password, Integer age, String phone,
String sex, String address, String account, Integer leader) {
this.name = name;
this.password = password;
this.age = age;
this.phone = phone;
this.sex = sex;
this.address = address;
this.account = account;
this.leader = leader;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
public String getAccount() {
return this.account;
}
public void setAccount(String account) {
this.account = account;
}
public Integer getLeader() {
return this.leader;
}
public void setLeader(Integer leader) {
this.leader = leader;
}
public Set getOrgs() {
return orgs;
}
public void setOrgs(Set orgs) {
this.orgs = orgs;
}
}
Orgnization.java
package com.bintang.web.system.po;
import java.util.HashSet;
import java.util.Set;
/**
* Orgnization entity. @author MyEclipse Persistence Tools
*/
public class Orgnization implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private Integer level;
private String sn;
private Set<Person> persons = new HashSet<Person>();
// Constructors
/** default constructor */
public Orgnization() {
}
/** full constructor */
public Orgnization(String name, Integer level, String sn) {
this.name = name;
this.level = level;
this.sn = sn;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getLevel() {
return this.level;
}
public void setLevel(Integer level) {
this.level = level;
}
public String getSn() {
return this.sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public Set<Person> getPersons() {
return persons;
}
public void setPersons(Set<Person> persons) {
this.persons = persons;
}
}
这样就实现了一个简单的many-to-many的多对多的关联