现在有两张表:一张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. 启动windows服务的bat文件编写格式

    1.bat文件需要和bin文件内容放在一起 启动服务的bat文件如下: sc create 邮件服务 binPath= "%~dp0可执行文件名称.exe" start= auto ...

  2. Eclipse+ADT+Android SDK 搭建安卓开发环境(版权属于forever-z)

    运行环境 windows 7或者10(64位); 为例eclipse-jee-neon-3-win32-x86_64: ADT-23.0.4 下载地址 安装JDK 这里可以参考关于安装JDK的教程,请 ...

  3. xpath-grab english name

    from scrapy.spider import Spider from scrapy.crawler import CrawlerProcess import pymysql conn = pym ...

  4. TCP requires two packet transfers to set up the connection before it can send data

    wHTTP重用现存连接来减少TCP建立时延. HTTP The Definitive Guide 4.2.3 TCP Connection Handshake Delays When you set ...

  5. Using virtual lists

    Download demo project - 15.7 Kb Contents Introduction Virtual list Creating a virtual list Add items ...

  6. 日期格式私人定制——SimpleDateFormat

    [前言] 最近项目需要特殊的日期格式,又恰好是String类型的,以前都没怎么用到SimpleDateFormat这个类去格式化日期,脑子里蹦出来的思路就是先把Date给toString了,然后慢慢切 ...

  7. 007-Shell test 命令,[],[[]]

    一.概述 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 其中[]完全等价于test,只是写法不同.双中括号[[]]基本等价于[],它支持更多的条件表达式,还允许在 ...

  8. Spark踩坑记:Spark Streaming+kafka应用及调优

    前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...

  9. Python(线程进程3)

    四 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切 ...

  10. 微信小程序组件action-sheet

    操作反馈action-sheet:官方文档 Demo Code: Page({ data: { actionSheetHidden: true, actionSheetItems: ['item1', ...