現在有兩張表:一張t_s_user用戶表和t_s_user_serial_number用戶序號表
CREATE TABLE `t_s_user` ( `id` varchar(32) NOT NULL, `email` varchar(50) DEFAULT NULL, `mobilePhone` varchar(30) DEFAULT NULL, `officePhone` varchar(20) DEFAULT NULL, `signatureFile` varchar(100) DEFAULT NULL, `update_name` varchar(32) DEFAULT NULL COMMENT '修改人', `update_date` datetime DEFAULT NULL COMMENT '修改時間', `update_by` varchar(32) DEFAULT NULL COMMENT '修改人id', `create_name` varchar(32) DEFAULT NULL COMMENT '創建人', `create_date` datetime DEFAULT NULL COMMENT '創建時間', `create_by` varchar(32) DEFAULT NULL COMMENT '創建人id', `last_slt_orgid` varchar(32) DEFAULT NULL, `checkPhone` varchar(30) DEFAULT NULL COMMENT '校驗手機號', `job_title` varchar(100) DEFAULT NULL COMMENT '職務名稱', `sex` int(1) DEFAULT NULL COMMENT '性別:1-男;2-女', `birthday` datetime DEFAULT NULL COMMENT '生日', `office` varchar(200) DEFAULT NULL COMMENT '辦公室', `headpic` varchar(200) DEFAULT NULL COMMENT '頭像', `qq` varchar(20) DEFAULT NULL COMMENT 'QQ號碼', `job_number` varchar(50) DEFAULT NULL COMMENT '工號', `version` bigint(20) DEFAULT '1', `inviteCode` varchar(6) DEFAULT '' COMMENT '用戶邀請碼', PRIMARY KEY (`id`), KEY `FK_2cuji5h6yorrxgsr8ojndlmal` (`id`), CONSTRAINT `FK_2cuji5h6yorrxgsr8ojndlmal` FOREIGN KEY (`id`) REFERENCES `t_s_base_user` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `t_s_user_serial_number` ( `sn` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用戶序號', `user_id` varchar(32) NOT NULL COMMENT '關聯用戶', PRIMARY KEY (`sn`), UNIQUE KEY `AK_Key_2` (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=2023 DEFAULT CHARSET=utf8mb4 COMMENT='用戶序號表';
其中,t_s_user_serial_number表中的user_id字段是使用的t_s_user表中的主鍵,現在需要在用戶實體中關聯查詢出用戶序號數據。
t_s_user實體類
package org.jeecgframework.web.system.pojo.base; import com.sctf.oa.rest.entity.TokenEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.jeecgframework.poi.excel.annotation.Excel; import javax.persistence.*; import java.math.BigInteger; import java.util.Date; /** * 系統用戶表 * @author 張代浩 */ @Entity @Table(name = "t_s_user") @PrimaryKeyJoinColumn(name = "id") @DynamicUpdate(true) @DynamicInsert(true) public class TSUser extends TSBaseUser implements java.io.Serializable { private static final long serialVersionUID = 1L; private String signatureFile;// 簽名文件 @Excel(name = "手機號(請將本列設為文本格式,必填)") private String mobilePhone;// 手機 @Excel(name = "辦公電話(非必填)") private String officePhone;// 辦公電話 @Excel(name = "郵箱(非必填)") private String email;// 郵箱 /**創建時間*/ private java.util.Date createDate; /**創建人ID*/ private java.lang.String createBy; /**創建人名稱*/ private java.lang.String createName; /**修改時間*/ private java.util.Date updateDate; /**修改人*/ private java.lang.String updateBy; /**修改人名稱*/ private java.lang.String updateName; /**最后一次選擇的組織機構*/ private java.lang.String lastSltOrgid; /**性別*/ private Integer sex; /**生日*/ private java.util.Date birthday; /**職務*/ private java.lang.String jobTitle; /**辦公司*/ private String office; /**頭像*/ private String headPic; private String checkPhone;// 校驗手機號碼 /**QQ號碼*/ private String qq; /**工號*/ private String jobNumber; /**令牌信息*/ private TokenEntity tokenInfo; /**版本號**/ private BigInteger version; /**用戶邀請碼**/ private String inviteCode; /**用戶序號**/ private TSUserSerialNumber userSerialNumber; @Column(name = "signatureFile", length = 100) public String getSignatureFile() { return this.signatureFile; } public void setSignatureFile(String signatureFile) { this.signatureFile = signatureFile; } @Column(name = "mobilePhone", length = 30) public String getMobilePhone() { return this.mobilePhone; } public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; } @Column(name = "officePhone", length = 20) public String getOfficePhone() { return this.officePhone; } public void setOfficePhone(String officePhone) { this.officePhone = officePhone; } @Column(name = "email", length = 50) public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } /** *方法: 取得java.util.Date *@return: java.util.Date 創建時間 */ @Column(name ="create_date",nullable=true) public java.util.Date getCreateDate(){ return this.createDate; } /** *方法: 設置java.util.Date *@param: java.util.Date 創建時間 */ public void setCreateDate(java.util.Date createDate){ this.createDate = createDate; } /** *方法: 取得java.lang.String *@return: java.lang.String 創建人ID */ @Column(name ="create_by",nullable=true,length=32) public java.lang.String getCreateBy(){ return this.createBy; } /** *方法: 設置java.lang.String *@param: java.lang.String 創建人ID */ public void setCreateBy(java.lang.String createBy){ this.createBy = createBy; } /** *方法: 取得java.lang.String *@return: java.lang.String 創建人名稱 */ @Column(name ="create_name",nullable=true,length=32) public java.lang.String getCreateName(){ return this.createName; } /** *方法: 設置java.lang.String *@param: java.lang.String 創建人名稱 */ public void setCreateName(java.lang.String createName){ this.createName = createName; } /** *方法: 取得java.util.Date *@return: java.util.Date 修改時間 */ @Column(name ="update_date",nullable=true) public java.util.Date getUpdateDate(){ return this.updateDate; } /** *方法: 設置java.util.Date *@param: java.util.Date 修改時間 */ public void setUpdateDate(java.util.Date updateDate){ this.updateDate = updateDate; } /** *方法: 取得java.lang.String *@return: java.lang.String 修改人ID */ @Column(name ="update_by",nullable=true,length=32) public java.lang.String getUpdateBy(){ return this.updateBy; } /** *方法: 設置java.lang.String *@param: java.lang.String 修改人ID */ public void setUpdateBy(java.lang.String updateBy){ this.updateBy = updateBy; } /** *方法: 取得java.lang.String *@return: java.lang.String 修改人名稱 */ @Column(name ="update_name",nullable=true,length=32) public java.lang.String getUpdateName(){ return this.updateName; } /** *方法: 設置java.lang.String *@param: java.lang.String 修改人名稱 */ public void setUpdateName(java.lang.String updateName){ this.updateName = updateName; } @Column(name ="last_slt_orgid",nullable=true,length=32) public String getLastSltOrgid() { return lastSltOrgid; } public void setLastSltOrgid(String lastSltOrgid) { this.lastSltOrgid = lastSltOrgid; } /** * 獲取性別 * @return */ @Column(name ="sex",nullable=true,length=1) public Integer getSex() { return sex; } /** * 設置性別 * @param sex */ public void setSex(Integer sex) { this.sex = sex; } /** * 獲取生日 * @return */ @Column(name ="birthday",nullable=true) public Date getBirthday() { return birthday; } /** * 設置生日 * @param birthday */ public void setBirthday(Date birthday) { this.birthday = birthday; } /** * 獲取職務 * @return */ @Column(name ="job_title",nullable=true,length = 100) public String getJobTitle() { return jobTitle; } /** * 設置職務 * @param jobTitle */ public void setJobTitle(String jobTitle) { this.jobTitle = jobTitle; } /** * 獲取辦公司 * @return */ @Column(name ="office",nullable=true,length = 200) public String getOffice() { return office; } /** * 設置辦公司 * @param office */ public void setOffice(String office) { this.office = office; } @Column(name = "checkPhone", length = 30) public String getCheckPhone() { return this.checkPhone; } public void setCheckPhone(String checkPhone) { this.checkPhone = checkPhone; } /** * 獲取頭像 * @return */ @Column(name ="headpic",nullable=true,length = 200) public String getHeadPic() { return headPic; } /** * 設置頭像 * @param headPic */ public void setHeadPic(String headPic) { this.headPic = headPic; } /** * 獲取QQ號碼 * @return */ @Column(name ="qq",nullable=true,length = 20) public String getQq() { return qq; } /** * 設置QQ號碼 * @param qq */ public void setQq(String qq) { this.qq = qq; } /** * 獲取工號 * @return */ @Column(name ="job_number",nullable=true,length = 50) public String getJobNumber() { return jobNumber; } /** * 設置工號 * @param jobNumber */ public void setJobNumber(String jobNumber) { this.jobNumber = jobNumber; } /** * 獲得用戶邀請碼 * @return */ @Column(name ="inviteCode",nullable=true,length = 6) public String getInviteCode() { return inviteCode; } /** * 設置用戶邀請碼 * @param inviteCode */ public void setInviteCode(String inviteCode) { this.inviteCode = inviteCode; } @OneToOne(optional = true,cascade = CascadeType.ALL,mappedBy = "user") public TokenEntity getTokenInfo() { return tokenInfo; } public void setTokenInfo(TokenEntity tokenInfo) { this.tokenInfo = tokenInfo; } @Column(name = "version") public BigInteger getVersion() { return version; } public void setVersion(BigInteger version) { this.version = version; } @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="id",referencedColumnName="user_id",unique=true,nullable=false,insertable = false,updatable = false) public TSUserSerialNumber getUserSerialNumber() { return userSerialNumber; } public void setUserSerialNumber(TSUserSerialNumber userSerialNumber) { this.userSerialNumber = userSerialNumber; } }
表t_s_user_serial_number的實體類:
package org.jeecgframework.web.system.pojo.base; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; import java.math.BigInteger; /** * 系統用戶序號 * Created by chenguo on 2017/6/14. */ @Entity @Table(name = "t_s_user_serial_number") @DynamicUpdate(true) @DynamicInsert(true) public class TSUserSerialNumber implements Serializable { /** * 用戶序號 */ private BigInteger sn; /** * 用戶id */ private String userId; @Id @GeneratedValue(generator = "serialNumber") @GenericGenerator(name = "serialNumber", strategy = "increment") @Column(name = "sn", nullable = false) public BigInteger getSn() { return sn; } public void setSn(BigInteger sn) { this.sn = sn; } @Column(name = "user_id", nullable = false) public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } }
關鍵的注解就在TSUser實體類中:
/**用戶序號**/ private TSUserSerialNumber userSerialNumber; @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="id",referencedColumnName="user_id",unique=true,nullable=false,insertable = false,updatable = false) public TSUserSerialNumber getUserSerialNumber() { return userSerialNumber; } public void setUserSerialNumber(TSUserSerialNumber userSerialNumber) { this.userSerialNumber = userSerialNumber; }
只需要上面的配置,雖然使用的@ManyToOne,但是取出來的數據還是一對一的關系,用戶表中的ID是一定的,用戶序號表中的user_id字段也是唯一的,但是使用@OneToOne,
可能在referencedColumnName="user_id",指定的時候可能無效,可以再去測試一下。可能新版本已經解決了這個問題。