hibernate關聯非主鍵注解配置


現在有兩張表:一張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",指定的時候可能無效,可以再去測試一下。可能新版本已經解決了這個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM