SpringData Manytomany 中间表添加额外字段

  • Course跟user是两张多对多关联表
  • 添加中间表实体类,表名跟多对多插入的中间表一致
  • 说明
    • 参数说明

Course跟user是两张多对多关联表

//省略部分不相关代码以及getter跟setter
/***    课程列表*/
@ApiModelProperty(hidden = true)
//放弃延时加载,改为立即加载
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name = "t_user_course",joinColumns = {@JoinColumn(name="user_id",referencedColumnName = "id")},inverseJoinColumns = {@JoinColumn(name="course_id",referencedColumnName = "id")})
private List<Course> courses = new ArrayList<>();

课程表内容

//省略部分不相关代码以及getter跟setter
@ManyToMany(mappedBy = "courses")
private Set<User> users = new HashSet<User>();

添加中间表实体类,表名跟多对多插入的中间表一致

中间表UserCourse内容

package com.fuju.pojo;import java.sql.Timestamp;
import java.util.Date;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;/***  用户课程中间表* @author Administrator**/
@Entity
@Table(name = "t_user_course")
@EntityListeners(AuditingEntityListener.class)
public class UserCourse {//省略getter跟setter/*** 主键ID*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Columnprivate Integer id;/*** 创建时间(中间表额外字段)*/@Column(name = "createTime",columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",updatable = false,nullable = false)@Generated(GenerationTime.INSERT)private Timestamp createTime;}

说明

由于中间表的数据是自动插入的,一开始采用的是如下方法添加创建时间

 /*** 创建时间*/@CreatedDate@Column(name = "createTime",updatable = false,nullable = false)private Date createTime;

以上方式存在问题
插入数据的时候执行的是如下语句
Hibernate: insert into t_user_course (user_id, course_id) values (?, ?)
插入的时候并没有给createTime赋值,导致系统报错

参数说明

注解@org.hibernate.annotations.Generated来标识一个已生成属性
GenerationTime的可用的设置选项是ALWAYSINSERT
当使用ALWAYS的时候,Hibernate每次执行SQL UPADATE或者INSERT插入的时候就会刷新实体
使用GenerationTime.INSERT,只会在SQL INSERT的时候出现,来获取数据库的默认值
属性也应该标识为只读,只读属性使用注解@Columnupdatableinsertable来实现

如果两个都设置了false,属性列表就用于不会在INSERT或者UPADATE语句中出现了,这些列的数值就由数据库来产生值
@ColumnDefault属性注解,设置列表的默认属性,当hibernate导出和生成SQL schenma DDL的时候
@Temporal注解来声明映射的SQL数据类型,如果使用了converter转换器之后,注解是不需要了
@Column(columnDefinition="timestamp default current_timestamp comment '购买时间")可以设置默认值、可以生成注释

SpringData Manytomany 中间表添加额外字段相关推荐

  1. hibernate annotation多对多中间表添加其他字段的第三种方法

    本示例主要以学生(T_Student)和课程(T_Course)之间的多对多关系,中间表Score(分数),学生表和课程表是多对多关系,另外为他们的关系添加额外的字段---分数: T_Student类 ...

  2. MySQL数据表添加新字段

    我们不关注约束条件,只添加字段. 在表的最后位置添加新字段(默认) 语法: ALTER TABLE 表名ADD 新字段名 数据类型 约束条件; 在表的开头位置添加新字段 语法: ALTER TABLE ...

  3. Excel 透视表 - 添加计算字段

    我们的透视表中,都是通过已有的原数据汇总得到的,如果我们想看的字段是表中没有的,并且需要复杂计算才能得来的,那么怎么办呢? 我们需要添加计算字段 原有的数据只有员工信息以及月薪,现在想添加涨薪后月薪情 ...

  4. 批量修改数据库,比如给数据库的某个表添加一个字段

    批量修改数据库,比如添加一个字段,如下 SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'. tp_client ADD from_uid INT(11) NOT  ...

  5. mongoDb 给表添加+ 删除字段

    1 .添加一个字段.  url 代表表名 , 添加字段 content. 字符串类型. db.url.update({}, {$set: {content:""}}, {multi ...

  6. sql 给已有的表添加一个字段和备注

    格式: ALTER TABLE 表名 ADD 字段名称 字段类型(字段长短-选填) NOT NULL(是否不可为空) DEFAULT 0(默认值) COMMENT '已经跑批给SAS的维度数目之和'( ...

  7. 中间表增加额外字段_知识分享 I 这样显示报表筛选字段 你学会了吗

    数据透视表创建完成后,报表筛选区域如果有多个筛选字段,系统会默认筛选字段的显示方式为垂直并排显示,如图所示. 为了使数据透视表更具可读性并易于操作,可以采用以下方法水平并排显示报表筛选区域中的多个筛选 ...

  8. 你不知道的copy、cut、paste事件——实现页面内容禁止复制,实现复制内容添加额外字段,比如复制请注明出处

    聊聊copy复制.cut剪切.paste粘贴事件. 首先这三个事件都属于ClipboardEvent事件(剪切板事件).什么意思呢?这个三个事件的事件对象event其实都是ClipboardEvent ...

  9. mysql建立电影表_【代码片段】MySQL新建表添加基础字段

    MySQL数据库表中,经常会用到的三个字段 SQL建表时,直接插入 gmt_create datetime null comment '创建时间', gmt_modified datetime nul ...

最新文章

  1. pyhon制作word、excel、ppt转pdf转换器大作战
  2. 批量选中删除(包含全选)---jsp,servlet
  3. python 不同模块之间的引用错误问题
  4. Weird Game CodeForces - 299C
  5. 求序列最长不下降子序列_最长不下降子序列nlogn算法详解
  6. golang延时_Golang 定时器底层实现深度剖析
  7. [渝粤教育] 西南科技大学 机电传动控制 在线考试复习资料
  8. 自适应控制——仿真实验一 用李雅普诺夫稳定性理论设计自适应规律
  9. 新一代天气雷达信息共享平台
  10. Ubuntu18.04运行QQ音乐
  11. 前后坐人书柜书桌的标准做法
  12. Silvaco TCAD仿真1——TCAD概述
  13. 小波自适应阈值选取python_小波去噪阈值如何选取_小波阈值分析 - 全文
  14. 顶层Makefile学习记录
  15. 2021泰安高考成绩排名查询,泰安高中学校排名2021最新排名,泰安高中排名前十
  16. 前端AI语音方面的实现
  17. php解密方法,六种php加密解密方法实例讲解
  18. 【论文精读】NeRF详解
  19. reactos终于被成功编译通过
  20. 图灵 计算机 ppt,turing machine 图灵机.ppt

热门文章

  1. 用java开发app的步骤,看看这篇文章吧!
  2. 腾讯要放弃 TIM 了?
  3. 不要随便借出你的帐号
  4. Android第三方系统有哪些,第三方安卓定制系统LineageOS 14.1支持6款新设备:包括一加3T...
  5. vue 项目, 父组件中每次点击按钮重新加载子组件,(重新生成dom 元素)
  6. 电源芯片使能管脚EN的6种玩法,助力设计稳定可靠的电源
  7. 【 Vue 】暗黑模式切换
  8. awl多进程SYN攻击
  9. Java作业(2020 12 05)
  10. c语言车队,狂野飙车8车队中c车的详细属性介绍