例:一对多和多对一的双向关系
这里我们只看用户表和申请假期表的关系
一个用户(一方)可以申请多次假期(多方)
1.其中申请假期的表中有申请人和审核人这两个字段,所以作为外键与用户表中的用户Id对应
2.申请人和审核人在申请表对应的实体类Attendance(多方)中是user对象的类型
3.相对应的在users表对应的user实体类应该写集合类型
一方的User
实体类user.java
<span style="font-size:14px;">package com.swe.oa.model;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
@Entity(name = "Users")
@SequenceGenerator(name = "userSEQ", sequenceName = "userSEQ_DB", allocationSize = 1)
public class User implements Serializable {
private static final long serialVersionUID = -1370604679718984565L;
/*
* user_Id 用户工号(用户名)
*/
private int user_Id;
/*
* user_Nickname 用户昵称
*/
private String user_Nickname;
/*
* user_RealName 用户真实姓名
*/
private String user_RealName;
/*
* user_Pwd 用户密码
*/
private String user_Pwd;
/*
* user_Sex 用户性别
*/
private String user_Sex;
/*
* user_Age 用户年龄
*/
private int user_Age;
/*
* user_Permission 用户权限0:普通员工、1:经理(默认0)
*/
private int user_Permission;
/*
* user_Tel 用户手机号
*/
private String user_Tel;
/*
* user_Address 用户住址
*/
private String user_Address;
/*
* emails_send 发送邮件集合
*/
private Set<Email> emails_send = new HashSet<Email>();
/*
* emails_receive 接收邮件集合
*/
private Set<Email> emails_receive = new HashSet<Email>();
<span style="color:#FF0000;">/*
* attendances 申请考勤记录集合
*/
private Set<Attendance> ad_Applicanters = new HashSet<Attendance>();
/*
* attendances 审批考勤记录集合
*/
private Set<Attendance> ad_Approvalers = new HashSet<Attendance>();</span>
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userSEQ")
public int getUser_Id() {
return user_Id;
}
public void setUser_Id(int user_Id) {
this.user_Id = user_Id;
}
@Column(nullable = false, unique = true, length = 50 )
public String getUser_Nickname() {
return user_Nickname;
}
public void setUser_Nickname(String user_Nickname) {
this.user_Nickname = user_Nickname;
}
@Column(nullable = false, length = 50)
public String getUser_RealName() {
return user_RealName;
}
public void setUser_RealName(String user_RealName) {
this.user_RealName = user_RealName;
}
@Column(nullable = false, length = 25)
public String getUser_Pwd() {
return user_Pwd;
}
public void setUser_Pwd(String user_Pwd) {
this.user_Pwd = user_Pwd;
}
@Column(nullable = false, length = 10)
public String getUser_Sex() {
return user_Sex;
}
public void setUser_Sex(String user_Sex) {
this.user_Sex = user_Sex;
}
@Column(nullable = false)
public int getUser_Age() {
return user_Age;
}
public void setUser_Age(int user_Age) {
this.user_Age = user_Age;
}
@Column(nullable = false, columnDefinition = "INT default 0")
public int getUser_Permission() {
return user_Permission;
}
public void setUser_Permission(int user_Permission) {
this.user_Permission = user_Permission;
}
@Column(nullable = false, length = 11)
public String getUser_Tel() {
return user_Tel;
}
public void setUser_Tel(String user_Tel) {
this.user_Tel = user_Tel;
}
@Column(nullable = false, length = 255)
public String getUser_Address() {
return user_Address;
}
public void setUser_Address(String user_Address) {
this.user_Address = user_Address;
}
@OneToMany(mappedBy = "email_Sender", cascade = CascadeType.ALL)
public Set<Email> getEmails_send() {
return emails_send;
}
public void setEmails_send(Set<Email> emails_send) {
this.emails_send = emails_send;
}
@OneToMany(mappedBy = "email_Receiver", cascade = CascadeType.ALL)
public Set<Email> getEmails_receive() {
return emails_receive;
}
public void setEmails_receive(Set<Email> emails_receive) {
this.emails_receive = emails_receive;
}
<span style="color:#FF0000;">@OneToMany(mappedBy = "ad_Applicanter", cascade = CascadeType.ALL)//对应的是申请人</span></span><span style="font-size:14px;"><span style="color:#FF0000;">ad_Applicanter</span></span><span style="font-size:14px;"><span style="color:#FF0000;">,并设置级联属性
public Set<Attendance> getAd_Applicanters() {
return ad_Applicanters;
}
public void setAd_Applicanters(Set<Attendance> ad_Applicanters) {
this.ad_Applicanters = ad_Applicanters;
}
@OneToMany(mappedBy = "ad_Approvaler", cascade = CascadeType.ALL)</span></span><span style="font-size:14px;"><span style="color:#FF0000;">//对应的是审批人</span></span><span style="font-size:14px;"><span style="color:#FF0000;">ad_Approvaler</span></span><span style="font-size:14px;"><span style="color:#FF0000;">,并设置级联属性</span></span><span style="font-size:14px;"><span style="color:#FF0000;">
public Set<Attendance> getAd_Approvalers() {
return ad_Approvalers;
}
public void setAd_Approvalers(Set<Attendance> ad_Approvalers) {
this.ad_Approvalers = ad_Approvalers;
}</span>
}
多方的Attendance.java ------------->
package com.swe.oa.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
@Entity(name = "Attendances")
@SequenceGenerator(name = "attendanceSEQ", sequenceName = "attendanceSEQ_DB", allocationSize = 1)
public class Attendance implements Serializable {
private static final long serialVersionUID = -1370604679718984565L;
/*
* ad_Id 考勤记录编号
*/
private int ad_Id;
/*
* ad_StartTime 考勤记录请假开始时间
*/
private Date ad_StartTime;
/*
* ad_Endtime 考勤记录请假结束时间
*/
private Date ad_Endtime;
/*
* ad_Days 考勤记录请假具体天数
*/
private int ad_Days;
/*
* ad_ReviewStatus 考勤记录审批状态0:未审核、1:审核通过、2:审核拒绝(默认0)
*/
private int ad_ReviewStatus;
/*
* ad_Reason 考勤记录请假原因
*/
private String ad_Reason;
<span style="color:#FF0000;"> /*
* ad_Approval 考勤记录审批人
*/
private User ad_Approvaler;
/*
* ad_Approval 考勤记录申请人
*/
private User ad_Applicanter;</span>
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "attendanceSEQ")
public int getAd_Id() {
return ad_Id;
}
public void setAd_Id(int ad_Id) {
this.ad_Id = ad_Id;
}
@Column(nullable = false)
public Date getAd_StartTime() {
return ad_StartTime;
}
public void setAd_StartTime(Date ad_StartTime) {
this.ad_StartTime = ad_StartTime;
}
@Column(nullable = false)
public Date getAd_Endtime() {
return ad_Endtime;
}
public void setAd_Endtime(Date ad_Endtime) {
this.ad_Endtime = ad_Endtime;
}
@Column(nullable = false)
public int getAd_Days() {
return ad_Days;
}
public void setAd_Days(int ad_Days) {
this.ad_Days = ad_Days;
}
@Column(nullable = false, columnDefinition = "INT default 0")
public int getAd_ReviewStatus() {
return ad_ReviewStatus;
}
public void setAd_ReviewStatus(int ad_ReviewStatus) {
this.ad_ReviewStatus = ad_ReviewStatus;
}
@Column(nullable = false, length = 255)
public String getAd_Reason() {
return ad_Reason;
}
public void setAd_Reason(String ad_Reason) {
this.ad_Reason = ad_Reason;
}
<span style="color:#FF0000;"> @ManyToOne
@JoinColumn(name = "user_approvaler_id")//外键
//审批人
public User getAd_Approvaler() {
return ad_Approvaler;
}
public void setAd_Approvaler(User ad_Approvaler) {
this.ad_Approvaler = ad_Approvaler;
}
@ManyToOne
@JoinColumn(name = "user_applicanter_id")
public User getAd_Applicanter() {
return ad_Applicanter;
}
public void setAd_Applicanter(User ad_Applicanter) {
this.ad_Applicanter = ad_Applicanter;
}
</span>
}
</span>