Hibernate学習のmany-to-many編


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の多対多の関連を実現しました