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的多对多的关联