现在有两张表:一张t_s_user用户表和t_s_user_serial_number用户序号表

  1. CREATE TABLE `t_s_user` (
  2. `id` varchar(32) NOT NULL,
  3. `email` varchar(50) DEFAULT NULL,
  4. `mobilePhone` varchar(30) DEFAULT NULL,
  5. `officePhone` varchar(20) DEFAULT NULL,
  6. `signatureFile` varchar(100) DEFAULT NULL,
  7. `update_name` varchar(32) DEFAULT NULL COMMENT '修改人',
  8. `update_date` datetime DEFAULT NULL COMMENT '修改时间',
  9. `update_by` varchar(32) DEFAULT NULL COMMENT '修改人id',
  10. `create_name` varchar(32) DEFAULT NULL COMMENT '创建人',
  11. `create_date` datetime DEFAULT NULL COMMENT '创建时间',
  12. `create_by` varchar(32) DEFAULT NULL COMMENT '创建人id',
  13. `last_slt_orgid` varchar(32) DEFAULT NULL,
  14. `checkPhone` varchar(30) DEFAULT NULL COMMENT '校验手机号',
  15. `job_title` varchar(100) DEFAULT NULL COMMENT '职务名称',
  16. `sex` int(1) DEFAULT NULL COMMENT '性别:1-男;2-女',
  17. `birthday` datetime DEFAULT NULL COMMENT '生日',
  18. `office` varchar(200) DEFAULT NULL COMMENT '办公室',
  19. `headpic` varchar(200) DEFAULT NULL COMMENT '头像',
  20. `qq` varchar(20) DEFAULT NULL COMMENT 'QQ号码',
  21. `job_number` varchar(50) DEFAULT NULL COMMENT '工号',
  22. `version` bigint(20) DEFAULT '',
  23. `inviteCode` varchar(6) DEFAULT '' COMMENT '用户邀请码',
  24. PRIMARY KEY (`id`),
  25. KEY `FK_2cuji5h6yorrxgsr8ojndlmal` (`id`),
  26. CONSTRAINT `FK_2cuji5h6yorrxgsr8ojndlmal` FOREIGN KEY (`id`) REFERENCES `t_s_base_user` (`ID`)
  27. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. CREATE TABLE `t_s_user_serial_number` (
  2. `sn` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户序号',
  3. `user_id` varchar(32) NOT NULL COMMENT '关联用户',
  4. PRIMARY KEY (`sn`),
  5. UNIQUE KEY `AK_Key_2` (`user_id`)
  6. ) ENGINE=InnoDB AUTO_INCREMENT=2023 DEFAULT CHARSET=utf8mb4 COMMENT='用户序号表';

其中,t_s_user_serial_number表中的user_id字段是使用的t_s_user表中的主键,现在需要在用户实体中关联查询出用户序号数据。

t_s_user实体类

  1. package org.jeecgframework.web.system.pojo.base;
  2.  
  3. import com.sctf.oa.rest.entity.TokenEntity;
  4. import org.hibernate.annotations.DynamicInsert;
  5. import org.hibernate.annotations.DynamicUpdate;
  6. import org.jeecgframework.poi.excel.annotation.Excel;
  7.  
  8. import javax.persistence.*;
  9. import java.math.BigInteger;
  10. import java.util.Date;
  11.  
  12. /**
  13. * 系统用户表
  14. * @author 张代浩
  15. */
  16. @Entity
  17. @Table(name = "t_s_user")
  18. @PrimaryKeyJoinColumn(name = "id")
  19. @DynamicUpdate(true)
  20. @DynamicInsert(true)
  21. public class TSUser extends TSBaseUser implements java.io.Serializable {
  22. private static final long serialVersionUID = 1L;
  23. private String signatureFile;// 签名文件
  24. @Excel(name = "手机号(请将本列设为文本格式,必填)")
  25. private String mobilePhone;// 手机
  26. @Excel(name = "办公电话(非必填)")
  27. private String officePhone;// 办公电话
  28. @Excel(name = "邮箱(非必填)")
  29. private String email;// 邮箱
  30. /**创建时间*/
  31. private java.util.Date createDate;
  32. /**创建人ID*/
  33. private java.lang.String createBy;
  34. /**创建人名称*/
  35. private java.lang.String createName;
  36. /**修改时间*/
  37. private java.util.Date updateDate;
  38. /**修改人*/
  39. private java.lang.String updateBy;
  40. /**修改人名称*/
  41. private java.lang.String updateName;
  42. /**最后一次选择的组织机构*/
  43. private java.lang.String lastSltOrgid;
  44. /**性别*/
  45. private Integer sex;
  46. /**生日*/
  47. private java.util.Date birthday;
  48. /**职务*/
  49. private java.lang.String jobTitle;
  50. /**办公司*/
  51. private String office;
  52. /**头像*/
  53. private String headPic;
  54. private String checkPhone;// 校验手机号码
  55. /**QQ号码*/
  56. private String qq;
  57. /**工号*/
  58. private String jobNumber;
  59. /**令牌信息*/
  60. private TokenEntity tokenInfo;
  61. /**版本号**/
  62. private BigInteger version;
  63. /**用户邀请码**/
  64. private String inviteCode;
  65. /**用户序号**/
  66. private TSUserSerialNumber userSerialNumber;
  67.  
  68. @Column(name = "signatureFile", length = 100)
  69. public String getSignatureFile() {
  70. return this.signatureFile;
  71. }
  72.  
  73. public void setSignatureFile(String signatureFile) {
  74. this.signatureFile = signatureFile;
  75. }
  76.  
  77. @Column(name = "mobilePhone", length = 30)
  78. public String getMobilePhone() {
  79. return this.mobilePhone;
  80. }
  81.  
  82. public void setMobilePhone(String mobilePhone) {
  83. this.mobilePhone = mobilePhone;
  84. }
  85.  
  86. @Column(name = "officePhone", length = 20)
  87. public String getOfficePhone() {
  88. return this.officePhone;
  89. }
  90.  
  91. public void setOfficePhone(String officePhone) {
  92. this.officePhone = officePhone;
  93. }
  94.  
  95. @Column(name = "email", length = 50)
  96. public String getEmail() {
  97. return this.email;
  98. }
  99.  
  100. public void setEmail(String email) {
  101. this.email = email;
  102. }
  103. /**
  104. *方法: 取得java.util.Date
  105. *@return: java.util.Date 创建时间
  106. */
  107. @Column(name ="create_date",nullable=true)
  108. public java.util.Date getCreateDate(){
  109. return this.createDate;
  110. }
  111.  
  112. /**
  113. *方法: 设置java.util.Date
  114. *@param: java.util.Date 创建时间
  115. */
  116. public void setCreateDate(java.util.Date createDate){
  117. this.createDate = createDate;
  118. }
  119. /**
  120. *方法: 取得java.lang.String
  121. *@return: java.lang.String 创建人ID
  122. */
  123. @Column(name ="create_by",nullable=true,length=32)
  124. public java.lang.String getCreateBy(){
  125. return this.createBy;
  126. }
  127.  
  128. /**
  129. *方法: 设置java.lang.String
  130. *@param: java.lang.String 创建人ID
  131. */
  132. public void setCreateBy(java.lang.String createBy){
  133. this.createBy = createBy;
  134. }
  135. /**
  136. *方法: 取得java.lang.String
  137. *@return: java.lang.String 创建人名称
  138. */
  139. @Column(name ="create_name",nullable=true,length=32)
  140. public java.lang.String getCreateName(){
  141. return this.createName;
  142. }
  143.  
  144. /**
  145. *方法: 设置java.lang.String
  146. *@param: java.lang.String 创建人名称
  147. */
  148. public void setCreateName(java.lang.String createName){
  149. this.createName = createName;
  150. }
  151. /**
  152. *方法: 取得java.util.Date
  153. *@return: java.util.Date 修改时间
  154. */
  155. @Column(name ="update_date",nullable=true)
  156. public java.util.Date getUpdateDate(){
  157. return this.updateDate;
  158. }
  159.  
  160. /**
  161. *方法: 设置java.util.Date
  162. *@param: java.util.Date 修改时间
  163. */
  164. public void setUpdateDate(java.util.Date updateDate){
  165. this.updateDate = updateDate;
  166. }
  167. /**
  168. *方法: 取得java.lang.String
  169. *@return: java.lang.String 修改人ID
  170. */
  171. @Column(name ="update_by",nullable=true,length=32)
  172. public java.lang.String getUpdateBy(){
  173. return this.updateBy;
  174. }
  175.  
  176. /**
  177. *方法: 设置java.lang.String
  178. *@param: java.lang.String 修改人ID
  179. */
  180. public void setUpdateBy(java.lang.String updateBy){
  181. this.updateBy = updateBy;
  182. }
  183. /**
  184. *方法: 取得java.lang.String
  185. *@return: java.lang.String 修改人名称
  186. */
  187. @Column(name ="update_name",nullable=true,length=32)
  188. public java.lang.String getUpdateName(){
  189. return this.updateName;
  190. }
  191.  
  192. /**
  193. *方法: 设置java.lang.String
  194. *@param: java.lang.String 修改人名称
  195. */
  196. public void setUpdateName(java.lang.String updateName){
  197. this.updateName = updateName;
  198. }
  199.  
  200. @Column(name ="last_slt_orgid",nullable=true,length=32)
  201. public String getLastSltOrgid() {
  202. return lastSltOrgid;
  203. }
  204.  
  205. public void setLastSltOrgid(String lastSltOrgid) {
  206. this.lastSltOrgid = lastSltOrgid;
  207. }
  208.  
  209. /**
  210. * 获取性别
  211. * @return
  212. */
  213. @Column(name ="sex",nullable=true,length=1)
  214. public Integer getSex() {
  215. return sex;
  216. }
  217. /**
  218. * 设置性别
  219. * @param sex
  220. */
  221. public void setSex(Integer sex) {
  222. this.sex = sex;
  223. }
  224.  
  225. /**
  226. * 获取生日
  227. * @return
  228. */
  229. @Column(name ="birthday",nullable=true)
  230. public Date getBirthday() {
  231. return birthday;
  232. }
  233.  
  234. /**
  235. * 设置生日
  236. * @param birthday
  237. */
  238. public void setBirthday(Date birthday) {
  239. this.birthday = birthday;
  240. }
  241.  
  242. /**
  243. * 获取职务
  244. * @return
  245. */
  246. @Column(name ="job_title",nullable=true,length = 100)
  247. public String getJobTitle() {
  248. return jobTitle;
  249. }
  250.  
  251. /**
  252. * 设置职务
  253. * @param jobTitle
  254. */
  255. public void setJobTitle(String jobTitle) {
  256. this.jobTitle = jobTitle;
  257. }
  258.  
  259. /**
  260. * 获取办公司
  261. * @return
  262. */
  263. @Column(name ="office",nullable=true,length = 200)
  264. public String getOffice() {
  265. return office;
  266. }
  267.  
  268. /**
  269. * 设置办公司
  270. * @param office
  271. */
  272. public void setOffice(String office) {
  273. this.office = office;
  274. }
  275.  
  276. @Column(name = "checkPhone", length = 30)
  277. public String getCheckPhone() {
  278. return this.checkPhone;
  279. }
  280.  
  281. public void setCheckPhone(String checkPhone) {
  282. this.checkPhone = checkPhone;
  283. }
  284.  
  285. /**
  286. * 获取头像
  287. * @return
  288. */
  289. @Column(name ="headpic",nullable=true,length = 200)
  290. public String getHeadPic() {
  291. return headPic;
  292. }
  293.  
  294. /**
  295. * 设置头像
  296. * @param headPic
  297. */
  298. public void setHeadPic(String headPic) {
  299. this.headPic = headPic;
  300. }
  301.  
  302. /**
  303. * 获取QQ号码
  304. * @return
  305. */
  306. @Column(name ="qq",nullable=true,length = 20)
  307. public String getQq() {
  308. return qq;
  309. }
  310.  
  311. /**
  312. * 设置QQ号码
  313. * @param qq
  314. */
  315. public void setQq(String qq) {
  316. this.qq = qq;
  317. }
  318.  
  319. /**
  320. * 获取工号
  321. * @return
  322. */
  323. @Column(name ="job_number",nullable=true,length = 50)
  324. public String getJobNumber() {
  325. return jobNumber;
  326. }
  327.  
  328. /**
  329. * 设置工号
  330. * @param jobNumber
  331. */
  332. public void setJobNumber(String jobNumber) {
  333. this.jobNumber = jobNumber;
  334. }
  335.  
  336. /**
  337. * 获得用户邀请码
  338. * @return
  339. */
  340. @Column(name ="inviteCode",nullable=true,length = 6)
  341. public String getInviteCode() {
  342. return inviteCode;
  343. }
  344.  
  345. /**
  346. * 设置用户邀请码
  347. * @param inviteCode
  348. */
  349. public void setInviteCode(String inviteCode) {
  350. this.inviteCode = inviteCode;
  351. }
  352.  
  353. @OneToOne(optional = true,cascade = CascadeType.ALL,mappedBy = "user")
  354. public TokenEntity getTokenInfo() {
  355. return tokenInfo;
  356. }
  357.  
  358. public void setTokenInfo(TokenEntity tokenInfo) {
  359. this.tokenInfo = tokenInfo;
  360. }
  361.  
  362. @Column(name = "version")
  363. public BigInteger getVersion() {
  364. return version;
  365. }
  366.  
  367. public void setVersion(BigInteger version) {
  368. this.version = version;
  369. }
  370.  
  371. @ManyToOne(cascade=CascadeType.ALL)
  372. @JoinColumn(name="id",referencedColumnName="user_id",unique=true,nullable=false,insertable = false,updatable = false)
  373. public TSUserSerialNumber getUserSerialNumber() {
  374. return userSerialNumber;
  375. }
  376.  
  377. public void setUserSerialNumber(TSUserSerialNumber userSerialNumber) {
  378. this.userSerialNumber = userSerialNumber;
  379. }
  380. }

表t_s_user_serial_number的实体类:

  1. package org.jeecgframework.web.system.pojo.base;
  2.  
  3. import org.hibernate.annotations.DynamicInsert;
  4. import org.hibernate.annotations.DynamicUpdate;
  5. import org.hibernate.annotations.GenericGenerator;
  6.  
  7. import javax.persistence.*;
  8. import java.io.Serializable;
  9. import java.math.BigInteger;
  10.  
  11. /**
  12. * 系统用户序号
  13. * Created by chenguo on 2017/6/14.
  14. */
  15. @Entity
  16. @Table(name = "t_s_user_serial_number")
  17. @DynamicUpdate(true)
  18. @DynamicInsert(true)
  19. public class TSUserSerialNumber implements Serializable {
  20. /**
  21. * 用户序号
  22. */
  23. private BigInteger sn;
  24. /**
  25. * 用户id
  26. */
  27. private String userId;
  28. @Id
  29. @GeneratedValue(generator = "serialNumber")
  30. @GenericGenerator(name = "serialNumber", strategy = "increment")
  31. @Column(name = "sn", nullable = false)
  32. public BigInteger getSn() {
  33. return sn;
  34. }
  35.  
  36. public void setSn(BigInteger sn) {
  37. this.sn = sn;
  38. }
  39. @Column(name = "user_id", nullable = false)
  40. public String getUserId() {
  41. return userId;
  42. }
  43.  
  44. public void setUserId(String userId) {
  45. this.userId = userId;
  46. }
  47. }

关键的注解就在TSUser实体类中:

  1. /**用户序号**/
  2. private TSUserSerialNumber userSerialNumber;
  3. @ManyToOne(cascade=CascadeType.ALL)
  4. @JoinColumn(name="id",referencedColumnName="user_id",unique=true,nullable=false,insertable = false,updatable = false)
  5. public TSUserSerialNumber getUserSerialNumber() {
  6. return userSerialNumber;
  7. }
  8.  
  9. public void setUserSerialNumber(TSUserSerialNumber userSerialNumber) {
  10. this.userSerialNumber = userSerialNumber;
  11. }

只需要上面的配置,虽然使用的@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. SmokePing安装手册

    SmokePing安装部署 SmokePing简介 Smokeping是一款用于网络性能监测的开源监控软件,主要用于对IDC的网络状况,网络质量,稳定性等做检测,通过rrdtool制图方式,图形化地展 ...

  2. Linux系统内核参数优化

    Linux服务器内核参数优化 cat >> /etc/sysctl.conf << EOF # kernel optimization net.ipv4.tcp_fin_tim ...

  3. Python数据分析(一):工具的简单使用

    1.Numpy 安装:pip install numpy [root@kvm work]# cat numpy_test.py #!/usr/bin/env python #coding:utf-8 ...

  4. img 标签注意 默认img标签,有一个1px的边框 img{ border: 0; }

    默认img标签,有一个1px的边框 img{ border: 0; }

  5. rabbitMQ基本概念

    一.网页登录方法 http://127.0.0.1:15672/ 用户名和密码默认为guest/guest 用java代码去连接rabbitmq用的端口是5672 二.rabbitMQ基本概念 Rab ...

  6. Java集合—List(转载)

    本篇文章将集中介绍了List集合相比Collection接口增加的一些重要功能以及List集合的两个重要子类ArrayList及LinkedList. 一.List集合 List作为Collectio ...

  7. SpringMVC的其他功能使用

    一.SpringMVC支持在控制器的业务方法中写入参数作为传递过来的变量 @Controller @RequestMapping(value="/kaiye") public cl ...

  8. Spring基本功能-依赖注入

    一.Spring的依赖注入(DI) 1.1 xml形式注入 (1)普通变量的注入 //普通变量的注入,xml配置property,实体类配置set方法注入 <bean id="pers ...

  9. index full scan和index fast full scan区别

    触发条件:只需要从索引中就可以取出所需要的结果集,此时就会走索引全扫描 Full Index Scan    按照数据的逻辑顺序读取数据块,会发生单块读事件, Fast Full Index Scan ...

  10. docker镜像上传到阿里云

    目前上传本地镜像到网上有多种途径,一个是上传到hub上,一个是阿里云镜像仓库,还要其他服务器. 上传到hub上实在是太慢了,我的服务器用的是阿里云,所以选择上传到阿里云镜像仓库中. 前提条件:linu ...