现在有两张表:一张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 '',
`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",指定的时候可能无效,可以再去测试一下。可能新版本已经解决了这个问题。

hibernate关联非主键注解配置的更多相关文章

  1. ThinkPHP关联模型如何关联非主键

    ThinkPHP关联模型默认是主键外键关联 官方并没有提供相关文档 如何实现非主键与非主键间之间的关联 <?php namespace Admin\Model; use Think\Model\ ...

  2. Jpa/Hibernate ManyToOne 关联非主键列 延迟加载失效

    @ManyToOne配置延迟加载,如果是关联主键列, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "billid", ...

  3. hibernate联合主键注解配置

    在网上看到好多方法,结果拿来用还是出现了一些问题.现在整理一下 1.主键类 import javax.persistence.Column; public class UserRoleUionPK i ...

  4. yii之relations关联非主键

    yii的relations里self::BELONGS_TO默认是用当前指定的键跟关联表的主键进行join,例如: return array('reply' => array(self::BEL ...

  5. 关于hibernate非主键多对一关联

    一直以来,用hibernate做多对一时,关联的都是主键,今天,同事设计的表,关联的却不是主键,这下麻烦了,hibernate的many-to-one默认关联的都是主键,原来,hibernate提供了 ...

  6. Hibernate非主键关联

    一. 非主键关联,我们进行外键关联时,通常使用的是主键,但有时候需要使用到其他列时可以通过以下方法设置: 注解中:@JoinColumn(name="city", referenc ...

  7. hibernate 联合主键生成机制(组合主键XML配置方式)

    hibernate 联合主键生成机制(组合主键XML配置方式)   如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...

  8. hibernate3.6-联合主键注解以及openSession和getCurrentSession区别

    [联合主键]>>>>配置方式:xml:    1. Student中单独创建StudentPk主键实体类 2. 配置: <composite-id name=" ...

  9. hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

    基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...

随机推荐

  1. Exchange Port

    Get-POPSettings-110 Get-IMAPSettings-143 Exchange Network Port References Exchange Server 2000 http: ...

  2. hdu1575 Tr A 矩阵快速幂模板题

    hdu1575   TrA 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 都不需要构造矩阵,矩阵是题目给的,直接套模板,把对角线上的数相加就好 ...

  3. Spring Data Jpa 初探

    Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库.Map-Reduce 框架.云数据服务等等;另外也包含对关系数据库的访问支持. 下载网址: ...

  4. mysql创建索引时报错1170

    MySQL只能将BLOB/TEXT类型字段设置索引为BLOB/TEXT数据的前N个字符. 索引指定下col2的长度就可以了 :alter table foo add index col_2 (col2 ...

  5. 不得不知的Excel技巧

    1.超链接 选中一个格右击选择超链接. 2.求和 选择一个格点击开始中的求和按钮并拖动求和区域. 3.冻结 冻结一行,选择一行区域,选择开始菜单中的冻结窗格. 冻结上面的行和左边的行,选择夹角的格并点 ...

  6. composer是php包管理工具

    composer是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. MAC.L ...

  7. 模块讲解----json模块(跨平台的序列化与反序列化)

    一.json的特点 1.只能处理简单的可序列化的对象:(字典,列表,元祖) 2.json支持不同语言之间的数据交互:(python  -  go,python - java)   二.使用场景 1.玩 ...

  8. 面试题5:JS实现从尾到头打印单链表

    单链表,在内存中所占地址是不连续的.所以遍历单链表时:需要从头遍历.而题目要求输出的顺序:从尾到头.也就是说第一个遍历到的节点最后一个输出,而最后一个遍历到的节点第一个输出.这就是典型的“后进先出”, ...

  9. Java并发编程实战4章

    第4章主要介绍如何构造线程安全类. 在设计线程安全类的过程中,需要包含以下三个基本要素: 找出构成对象状态的所有变量. 找出约束状态变量的不变性条件. 建立对象状态的并发访问管理策略. 构造线程安全类 ...

  10. Ajax跨域请求 同源策略与Jsonp

    同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的 ...