当前位置: 首页 > ds >正文

@Column 注解属性详解

提示:文章旨在说明 @Column 注解属性如何在日常开发中使用,数据库类型为 MySql,其他类型数据库可能存在偏差,需要注意。

文章目录

  • 一、name 方法
  • 二、unique 方法
  • 三、nullable 方法
  • 四、insertable 方法
  • 五、updatable 方法
  • 六、columnDefinition 方法
  • 七、table 方法
  • 八、length 方法
  • 九、precision 方法
  • 十、scale 方法
  • 总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、name 方法

String name() default "";

该方法用于将实体类的属性与数据库表中的列进行映射,比如:

@Column(name = "user_age")
private String age;  // 映射到数据库的 user_age 列

如果不用该方法,则 java 实体类与数据库表中的列保持一致,如java中是 age,则数据库中也是 age,但是如果开启了全局命名策略,如小驼峰转换下划线,则会默认将java中多个单词的属性,用下划线隔开,并小写。如userAge,则对应的列为user_age;判断用下划线是取决于大写的字母。

开启配置:

spring:jpa:hibernate:naming:physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy

二、unique 方法

boolean unique() default false;

指示该列是否具有唯一约束,建议与数据库中唯一索引共同开启,默认 false。

@Column(unique = true)
private String email;  // 确保email列的值在表中是唯一的

唯一索引

三、nullable 方法

boolean nullable() default true;

指示该列是否允许为 null 值,默认 true。

@Column(nullable = false)
private String password;  // 密码字段不允许为null

四、insertable 方法

boolean insertable() default true;

指示该列是否允许为 null 值,默认 true。

@Column(insertable = false)
private Date createTime;  // 创建时间由数据库自动生成,不包含在INSERT中

五、updatable 方法

boolean updatable() default true;

指示该列是否包含在 UPDATE 语句中,默认 true。

@Column(updatable = false)
private Long id;  // ID一旦创建不可更新

六、columnDefinition 方法

String columnDefinition() default "";

指定生成 DDL 时使用的列定义。

@Column(columnDefinition = "TEXT")
private String content;  // 指定为TEXT类型而非默认的VARCHAR@Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
private Date lastModified;  // 指定为TIMESTAMP类型,使用当前时间函数@Column(columnDefinition = "varchar(64) comment '版本号'") 
private String edition;  // 指定为varchar类型,长度为64,中文注释为版本号

如果配置 spring.jpa.hibernate.ddl-auto=update,则会读取该方法生成对应的列,所以在开发阶段,配合使用会大大节约开发时间,强烈建议使用。唯一注意的是在使用需要让 java 中的类型与数据库中类型兼容,不要出现 java 中是字符串,而数据库中是时间类型。

七、table 方法

String table() default "";

当实体映射到多个表时,指定该列所属的表。

@Column(name = "hobby", table = "user_details")
private String hobby;  // 该属性映射到user_details表的列

该方法实际使用会比较复杂,会和 @SecondaryTable 注解配合使用,那么从例子可以看到,在主表对应的列是 hobby,在扩展表对应的列是 user_details,当然实际使用情况可能还会存在其他关联情况,这里不做过多讨论,大家只需知道该方法用于将属性映射到扩展表中的列即可。

八、length 方法

int length() default 255;

指定字符串类型列的长度(仅对String类型有效),默认 255。

@Column(length = 100)
private String title;  // 标题最大长度为100字符

九、precision 方法

int precision() default 0;

指定十进制数值的精度(总位数),用于 BigDecimal,默认 0。

@Column(precision = 10, scale = 2)
private BigDecimal salary;  // 总共10位,小数点后2位

一般和 scale 配合使用,建议对精确到小数点后几位的数字类型使用,场景建议为工业数字,钱币数值等。

十、scale 方法

int scale() default 0;

指定十进制数值的小数位数,用于 BigDecimal,默认 0。

@Column(precision = 5, scale = 2)
private BigDecimal price;  // 如123.45

一般和 precision 配合使用。

总结

没有总结,希望大家在实际开发中真正理解,并正确使用就好~~~

http://www.xdnf.cn/news/8407.html

相关文章:

  • 【Nature子刊聚焦:超构表面多维调控与AI驱动的设计革命 ——2024-2025年超构表面领域突破性进展速览 】
  • 职坐标解析物联网协议与传感器技术实战应用
  • MuJoCo安装记录
  • 一个基于 ESP-IDF 的 RPC over UDP 示例
  • 2025 最新 Redis 面试题大全
  • 探索服务网格(Service Mesh):云原生时代的网络新范式
  • DDR DFI 5.2 协议接口学习梳理笔记01
  • 工业软件国产化:构建自主创新生态,赋能制造强国建设
  • NIST提出新型安全指标:识别潜在被利用漏洞
  • 港口危货储存单位主要安全管理人员考试题
  • java使用aspose合并exl单元格
  • 【Qt开发】显示类控件——QLabel
  • IDEA中设置mysql数据库中列的主键、唯一、非空、递增等属性,及如何删除此前设置的属性
  • 基于 STC89C52 的养殖场智能温控系统设计与实现
  • Spring Boot + MyBatis-Plus实现操作日志记录
  • 绘制音频信号的各种频谱图,包括Mel频谱图、STFT频谱图等。它不仅能够绘制频谱图librosa.display.specshow
  • 知道不知道
  • 【SpringBoot】从零开始全面解析Spring IocDI (一)
  • table表格鼠标圈选数据并复制且自带html结构
  • 基于Python+YOLO模型的手势识别系统
  • 使用 FFmpeg 将视频转换为高质量 GIF(保留原始尺寸和帧率)
  • ​从非洲掘金到全球逐鹿,传音用本地化战略重塑出海路径
  • C++11-(3)
  • Android内存调优学习总结(OOM与ANR)
  • ARFoundation系列讲解 - 77 音频可视化
  • Science Robotics|仿生章鱼机器人问世:流体智能分级操控,抓豆腐、测触感全自动
  • API自动化与持续集成核心实战知识点!
  • uniapp 嵌入鸿蒙原生组件 具体步骤
  • 封装WPF中列表控件的剪贴板操作(附源码)
  • 如何通过用户体验设计提升Shopify独立站的信任度