hibernate多對多拆成2個多對一的處理方式

來源:互聯網
上載者:User

由於特殊需要,需要將多對多的方式拆成2個多對一(或一對多)。主要區別是多了一個中間的關聯類別。

       需求是:議程可以共用(也可不共用),共用又可共用給整個公司和可選的部門。是一個簡化了的需求,以做測試用。具體可以看源碼。

表結構:
DROP TABLE IF EXISTS `calendar`;

CREATE TABLE `calendar` (
  `f_id` int(10) NOT NULL default '0',
  `f_date` date default NULL,
  `f_time` char(6) default NULL,
  PRIMARY KEY  (`f_id`)
) TYPE=InnoDB;

#
# Structure for the `department` table :
#

DROP TABLE IF EXISTS `department`;

CREATE TABLE `department` (
  `f_id` int(10) NOT NULL default '0',
  `f_name` char(30) default NULL,
  PRIMARY KEY  (`f_id`)
) TYPE=InnoDB;

#
# Structure for the `calendar_department` table :
#

DROP TABLE IF EXISTS `calendar_department`;

CREATE TABLE `calendar_department` (
  `f_calendar_id` int(10) NOT NULL default '0',
  `f_department_id` int(10) NOT NULL default '0',
  PRIMARY KEY  (`f_calendar_id`,`f_department_id`),
  KEY `calendar_index` (`f_calendar_id`),
  KEY `department_index` (`f_department_id`),
  CONSTRAINT `calendar_department_ibfk_1` FOREIGN KEY (`f_calendar_id`) REFERENCES `calendar` (`f_id`),
  CONSTRAINT `calendar_department_ibfk_2` FOREIGN KEY (`f_department_id`) REFERENCES `department` (`f_id`)
) TYPE=InnoDB;

 

 

java檔案

 

package model;</p><p>import java.io.Serializable;<br />import java.util.Date;<br />import java.util.HashSet;<br />import java.util.Set;<br />import org.apache.commons.lang.builder.ToStringBuilder;</p><p>/** @author Hibernate CodeGenerator */<br />public class Calendar implements Serializable {</p><p> /** identifier field */<br /> private Long fid;</p><p> /** nullable persistent field */<br /> private Date fdate;</p><p> /** nullable persistent field */<br /> private String ftime;</p><p> /** persistent field */<br /> private Set calendarDepartments;</p><p> /** full constructor */<br /> public Calendar(Date fdate, String ftime, Set calendarDepartments) {<br /> this.fdate = fdate;<br /> this.ftime = ftime;<br /> this.calendarDepartments = calendarDepartments;<br /> }</p><p> /** default constructor */<br /> public Calendar() {<br /> }</p><p> /** minimal constructor */<br /> public Calendar(Set calendarDepartments) {<br /> this.calendarDepartments = calendarDepartments;<br /> }</p><p> public Calendar(Date date, String string) {<br /> this.fdate = date;<br /> this.ftime = string;<br />}</p><p> public Long getFid() {<br />return fid;<br />}</p><p>public void setFid(Long fid) {<br />this.fid = fid;<br />}</p><p>public Date getFdate() {<br /> return this.fdate;<br /> }</p><p> public void setFdate(Date fdate) {<br /> this.fdate = fdate;<br /> }</p><p> public String getFtime() {<br /> return this.ftime;<br /> }</p><p> public void setFtime(String ftime) {<br /> this.ftime = ftime;<br /> }</p><p> public Set getCalendarDepartments() {<br /> if(this.calendarDepartments == null )<br /> this.calendarDepartments = new HashSet();<br /> return this.calendarDepartments;<br /> }</p><p> public void setCalendarDepartments(Set calendarDepartments) {<br /> this.calendarDepartments = calendarDepartments;<br /> }</p><p> public String toString() {<br /> return new ToStringBuilder(this)<br /> .append("fid", getFid())<br /> .toString();<br /> }</p><p>}<br />

 

 

 

package model;</p><p>import java.io.Serializable;<br />import java.util.HashSet;<br />import java.util.Set;<br />import org.apache.commons.lang.builder.ToStringBuilder;</p><p>/** @author Hibernate CodeGenerator */<br />public class Department implements Serializable {</p><p> /** identifier field */<br /> private Long fid;</p><p> /** nullable persistent field */<br /> private String fname;</p><p> /** persistent field */<br /> private Set calendarDepartments;</p><p> /** full constructor */<br /> public Department(String fname, Set calendarDepartments) {<br /> this.fname = fname;<br /> this.calendarDepartments = calendarDepartments;<br /> }</p><p> /** default constructor */<br /> public Department() {<br /> }</p><p> /** minimal constructor */<br /> public Department(Set calendarDepartments) {<br /> this.calendarDepartments = calendarDepartments;<br /> }</p><p> public Department(Long fid, String fname) {<br /> this.fid = fid;<br /> this.fname = fname;<br />}</p><p>public Long getFid() {<br />return fid;<br />}</p><p>public void setFid(Long fid) {<br />this.fid = fid;<br />}</p><p>public String getFname() {<br /> return this.fname;<br /> }</p><p> public void setFname(String fname) {<br /> this.fname = fname;<br /> }</p><p> public Set getCalendarDepartments() {<br /> if(this.calendarDepartments == null )<br /> this.calendarDepartments = new HashSet();<br /> return this.calendarDepartments;<br /> }</p><p> public void setCalendarDepartments(Set calendarDepartments) {<br /> this.calendarDepartments = calendarDepartments;<br /> }</p><p> public String toString() {<br /> return new ToStringBuilder(this)<br /> .append("fid", getFid())<br /> .toString();<br /> }</p><p>}<br />

 

 

package model;</p><p>import java.io.Serializable;<br />import java.util.Date;</p><p>public class CalendarDepartment implements Serializable {</p><p>public static class Id implements Serializable {</p><p>private Long calendarId;</p><p>private Long departmentId;</p><p>public Id() {}</p><p>public Id(Long calendarId, Long departmentId) {<br />this.calendarId = calendarId;<br />this.departmentId = departmentId;<br />}</p><p>public boolean equals(Object o) {<br />if (o instanceof Id) {<br />Id that = (Id)o;<br />return this.calendarId.equals(that.calendarId) &&<br /> this.departmentId.equals(that.departmentId);<br />} else {<br />return false;<br />}<br />}</p><p>public int hashCode() {<br />return calendarId.hashCode() + departmentId.hashCode();<br />}<br />}</p><p>private Id id = new Id();</p><p>private Calendar calendar;</p><p>private Department department;</p><p>/**<br /> * No-arg constructor for JavaBean tools.<br /> */<br /> CalendarDepartment() {}</p><p>/**<br /> * Full constructor;<br /> */<br />public CalendarDepartment(Department department, Calendar calendar) {</p><p>this.department = department;<br />this.calendar = calendar;</p><p>// Set identifier values<br />this.id.calendarId = calendar.getFid();<br />this.id.departmentId = department.getFid();</p><p>// Guarantee referential integrity<br />department.getCalendarDepartments().add(this);<br />calendar.getCalendarDepartments().add(this);<br />}</p><p>// ********************** Accessor Methods ********************** //</p><p>public Id getId() { return id; }</p><p>public Calendar getCalendar() {<br />return calendar;<br />}</p><p>public Department getDepartment() {<br />return department;<br />}</p><p>public boolean equals(Object o) {<br />if (o instanceof CalendarDepartment) {<br />CalendarDepartment that = (CalendarDepartment)o;<br />return this.calendar.getFid().equals(that.calendar.getFid()) &&<br /> this.department.getFid().equals(that.department.getFid());<br />} else {<br />return false;<br />}<br />}</p><p>public int hashCode() {<br />return this.calendar.getFid().hashCode() + this.department.getFid().hashCode();<br />}<br />// ********************** Business Methods ********************** //</p><p>}

 

 

<?xml version="1.0"?><br /><!DOCTYPE hibernate-mapping SYSTEM<br />"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"></p><p><hibernate-mapping package="model"></p><p><class name="model.Calendar" table="calendar" lazy="true"></p><p> <id<br /> name="fid"<br /> type="long"<br /> column="f_id"<br /> ><br /> <generator class="increment" /><br /> </id></p><p> <property<br /> name="fdate"<br /> type="java.sql.Timestamp"<br /> column="f_date"<br /> length="10"<br /> /><br /> <property<br /> name="ftime"<br /> type="java.lang.String"<br /> column="f_time"<br /> length="8"<br /> /></p><p> <!-- Associations --></p><p> <!-- bi-directional one-to-many association to CalendarDepartment --><br /> <set name="calendarDepartments"<br /> cascade="all,delete-orphan"<br /> inverse="true"<br /> fetch="subselect"<br /> access="field"><br /> <key><br /> <column name="f_calendar_id" not-null="true"/><br /> </key><br /> <one-to-many class="CalendarDepartment"/><br /> </set><br /> <!--<br /> <set<br /> name="calendarDepartments"<br /> lazy="true"<br /> inverse="true"<br />cascade="none"<br /> ><br /> <key><br /> <column name="f_calendar_id" /><br /> </key><br /> <one-to-many<br /> class="model.CalendarDepartment"<br /> /><br /> </set> --></p><p></class><br /></hibernate-mapping><br />

 

 

<?xml version="1.0"?><br /><!DOCTYPE hibernate-mapping SYSTEM<br />"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"></p><p><hibernate-mapping package="model"></p><p><class name="model.Department" table="department" lazy="true"></p><p> <id<br /> name="fid"<br /> type="long"<br /> column="f_id"<br /> ><br /> <generator class="increment" /><br /> </id></p><p> <property<br /> name="fname"<br /> type="java.lang.String"<br /> column="f_name"<br /> length="30"<br /> /></p><p> <!-- Associations --></p><p> <!-- bi-directional one-to-many association to CalendarDepartment --></p><p> <set name="calendarDepartments"<br /> cascade="all,delete-orphan"<br /> inverse="true"<br /> fetch="subselect"<br /> access="field"><br /> <key><br /> <column name="f_department_id" not-null="true"/><br /> </key><br /> <one-to-many class="CalendarDepartment"/><br /> </set><br /> <!--<br /> <set<br /> name="calendarDepartments"<br /> lazy="true"<br /> inverse="true"<br />cascade="none"<br /> ><br /> <key><br /> <column name="f_department_id" /><br /> </key><br /> <one-to-many<br /> class="model.CalendarDepartment"<br /> /><br /> </set><br />--><br /></class><br /></hibernate-mapping><br />

 

 

<?xml version="1.0"?><br /><!DOCTYPE hibernate-mapping SYSTEM<br />"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"></p><p><hibernate-mapping package="model"></p><p><class name="CalendarDepartment" table="calendar_department" mutable="true"></p><p> <composite-id name="id"<br /> class="CalendarDepartment$Id"<br /> access="field"></p><p> <key-property name="calendarId"<br /> access="field"<br /> column="f_calendar_id"/></p><p> <key-property name="departmentId"<br /> access="field"<br /> column="f_department_id"/><br /> </composite-id></p><p> <many-to-one name="calendar"<br /> column="f_calendar_id"<br /> not-null="true"<br /> access="field"<br /> insert="false"<br /> update="false"/></p><p> <many-to-one name="department"<br /> column="f_department_id"<br /> not-null="true"<br /> access="field"<br /> insert="false"<br /> update="false"/></p><p></class></p><p></hibernate-mapping>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.