hibernate多对多拆成2个多对一的处理方式

由于特殊需要,需要将多对多的方式拆成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; import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.builder.ToStringBuilder; /** @author Hibernate CodeGenerator */ public class Calendar implements Serializable { /** identifier field */ private Long fid; /** nullable persistent field */ private Date fdate; /** nullable persistent field */ private String ftime; /** persistent field */ private Set calendarDepartments; /** full constructor */ public Calendar(Date fdate, String ftime, Set calendarDepartments) { this.fdate = fdate; this.ftime = ftime; this.calendarDepartments = calendarDepartments; } /** default constructor */ public Calendar() { } /** minimal constructor */ public Calendar(Set calendarDepartments) { this.calendarDepartments = calendarDepartments; } public Calendar(Date date, String string) { this.fdate = date; this.ftime = string; } public Long getFid() { return fid; } public void setFid(Long fid) { this.fid = fid; } public Date getFdate() { return this.fdate; } public void setFdate(Date fdate) { this.fdate = fdate; } public String getFtime() { return this.ftime; } public void setFtime(String ftime) { this.ftime = ftime; } public Set getCalendarDepartments() { if(this.calendarDepartments == null ) this.calendarDepartments = new HashSet(); return this.calendarDepartments; } public void setCalendarDepartments(Set calendarDepartments) { this.calendarDepartments = calendarDepartments; } public String toString() { return new ToStringBuilder(this) .append("fid", getFid()) .toString(); } }

 

 

 

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

 

 

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

 

 

 

 

 

 

 

你可能感兴趣的:(ssh)