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 '',
- `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关联非主键注解配置的更多相关文章
- ThinkPHP关联模型如何关联非主键
ThinkPHP关联模型默认是主键外键关联 官方并没有提供相关文档 如何实现非主键与非主键间之间的关联 <?php namespace Admin\Model; use Think\Model\ ...
- Jpa/Hibernate ManyToOne 关联非主键列 延迟加载失效
@ManyToOne配置延迟加载,如果是关联主键列, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "billid", ...
- hibernate联合主键注解配置
在网上看到好多方法,结果拿来用还是出现了一些问题.现在整理一下 1.主键类 import javax.persistence.Column; public class UserRoleUionPK i ...
- yii之relations关联非主键
yii的relations里self::BELONGS_TO默认是用当前指定的键跟关联表的主键进行join,例如: return array('reply' => array(self::BEL ...
- 关于hibernate非主键多对一关联
一直以来,用hibernate做多对一时,关联的都是主键,今天,同事设计的表,关联的却不是主键,这下麻烦了,hibernate的many-to-one默认关联的都是主键,原来,hibernate提供了 ...
- Hibernate非主键关联
一. 非主键关联,我们进行外键关联时,通常使用的是主键,但有时候需要使用到其他列时可以通过以下方法设置: 注解中:@JoinColumn(name="city", referenc ...
- hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...
- hibernate3.6-联合主键注解以及openSession和getCurrentSession区别
[联合主键]>>>>配置方式:xml: 1. Student中单独创建StudentPk主键实体类 2. 配置: <composite-id name=" ...
- hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同
基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...
随机推荐
- SmokePing安装手册
SmokePing安装部署 SmokePing简介 Smokeping是一款用于网络性能监测的开源监控软件,主要用于对IDC的网络状况,网络质量,稳定性等做检测,通过rrdtool制图方式,图形化地展 ...
- Linux系统内核参数优化
Linux服务器内核参数优化 cat >> /etc/sysctl.conf << EOF # kernel optimization net.ipv4.tcp_fin_tim ...
- Python数据分析(一):工具的简单使用
1.Numpy 安装:pip install numpy [root@kvm work]# cat numpy_test.py #!/usr/bin/env python #coding:utf-8 ...
- img 标签注意 默认img标签,有一个1px的边框 img{ border: 0; }
默认img标签,有一个1px的边框 img{ border: 0; }
- rabbitMQ基本概念
一.网页登录方法 http://127.0.0.1:15672/ 用户名和密码默认为guest/guest 用java代码去连接rabbitmq用的端口是5672 二.rabbitMQ基本概念 Rab ...
- Java集合—List(转载)
本篇文章将集中介绍了List集合相比Collection接口增加的一些重要功能以及List集合的两个重要子类ArrayList及LinkedList. 一.List集合 List作为Collectio ...
- SpringMVC的其他功能使用
一.SpringMVC支持在控制器的业务方法中写入参数作为传递过来的变量 @Controller @RequestMapping(value="/kaiye") public cl ...
- Spring基本功能-依赖注入
一.Spring的依赖注入(DI) 1.1 xml形式注入 (1)普通变量的注入 //普通变量的注入,xml配置property,实体类配置set方法注入 <bean id="pers ...
- index full scan和index fast full scan区别
触发条件:只需要从索引中就可以取出所需要的结果集,此时就会走索引全扫描 Full Index Scan 按照数据的逻辑顺序读取数据块,会发生单块读事件, Fast Full Index Scan ...
- docker镜像上传到阿里云
目前上传本地镜像到网上有多种途径,一个是上传到hub上,一个是阿里云镜像仓库,还要其他服务器. 上传到hub上实在是太慢了,我的服务器用的是阿里云,所以选择上传到阿里云镜像仓库中. 前提条件:linu ...