千家信息网

如何解决springboot jpa@Column columnDefinition等属性失效问题

发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,本篇内容主要讲解"如何解决springboot jpa@Column columnDefinition等属性失效问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大
千家信息网最后更新 2025年02月19日如何解决springboot jpa@Column columnDefinition等属性失效问题

本篇内容主要讲解"如何解决springboot jpa@Column columnDefinition等属性失效问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何解决springboot jpa@Column columnDefinition等属性失效问题"吧!

jpa @Column columnDefinition属性失效

删除一条属性,默认false

#spring.jpa.properties.hibernate.globally_quoted_identifiers=true

原因

开启后, 创建sql语句执行时会添加'`', 会造成columnDefinition 属性失效, author: dreamlu

例如

1.属性设置为true

alter table `xxx` add column `xxx` `varchar(50) default ''`// sql 语法错误

2.属性为false

alter table xxx add column xx varchar(50) default ''// 执行成功

可以看出: 有舍有得,第二种要求字段/表等命名不能和mysql或其他数据库中关键字重名

jpa column注解

知识点

@Column注解一共有10个属性,这10个属性均为可选属性,各属性含义分别如下:

  • name:name属性定义了被标注字段在数据库表中所对应字段的名称;

  • unique:unique属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。

  • nullable :nullable属性表示该字段是否可以为null值,默认为true。

  • insertable :insertable属性表示在使用"INSERT"脚本插入数据时,是否需要插入该字段的值。

  • updatable:updatable属性表示在使用"UPDATE"脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。

  • columnDefinition :columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)

  • table :table属性定义了包含当前字段的表名。

  • length :length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。

  • precisionscale :precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

precision和scale疑点

@Table(name = "CUSTOMERS")@Entitypublic class Customer {    @Column(name = "ID")    @GeneratedValue(strategy = GenerationType.AUTO)    @Id    private Integer id;     @Column(name = "Name")    private String name;     @Column(name = "Email", nullable = true, length = 128)    private String email;     @Column(name = "Age")    private int age;     @Column(name = "Remark", columnDefinition = "text")    private String remark;     @Column(name = "Salary1", columnDefinition = "decimal(5,2)")    private double salary1;     @Column(name = "Salary2", precision = 5, scale = 2)    private double salary2;     @Column(name = "Salary3", columnDefinition = "decimal(5,2)")    private BigDecimal salary3;     @Column(name = "Salary4", precision = 5, scale = 2)    private BigDecimal salary4;    ......}

数据库DDL:

CREATE TABLE `customers` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `Age` int(11) DEFAULT NULL,  `Email` varchar(128) DEFAULT NULL,  `Name` varchar(255) DEFAULT NULL,  `Remark` text,  `Salary1` decimal(5,2) DEFAULT NULL,  `Salary2` double DEFAULT NULL,  `Salary3` decimal(5,2) DEFAULT NULL,  `Salary4` decimal(5,2) DEFAULT NULL,  PRIMARY KEY (`ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

小结一下

1.double类型若在columnDefinition属性中指定数字类型为decimal并指定精度,则最终以columnDefinition为准 (oracle数据库中除外,其指定为float类型,因为oracle数据库没有double类型,若针对oracle数据库进行精确,则改为

@Column(name = "Salary1", columnDefinition = "decimal(5,2)")  //或columnDefinition = "number(5,2)"    private Float salary1;

2.double类型将在数据库中映射为double类型,precision和scale属性无效

3.BigDecimal类型在数据库中映射为decimal类型,precision和scale属性有效

4.precision和scale属性只在BigDecimal类型中有效

到此,相信大家对"如何解决springboot jpa@Column columnDefinition等属性失效问题"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

属性 字段 类型 数据 数据库 问题 有效 内容 标记 标识 注解 精度 脚本 语句 长度 学习 生成 实用 更深 精确 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 顶点软件开发 数据库一个表可以有几个主码 广州欧索网络技术有限公司 网络技术流小说 上海虹口公安分局网络安全支队 服务器管理培训ppt 网络安全活动的创新点或特色 南通专业汽配软件开发教程 龙海ctf网络安全工程师 服务器性能和配置有区别 ipad显示服务器网卡无法打开 dell首款军事服务器 通州区技术软件开发介绍 经贸计算机网络技术几个班 玩战地5应该加速哪个服务器 电磁暂态仿真软件开发项目 服务器文件夹的英文 区委网信办网络安全检查 塔科夫服务器延迟多少能用 网络安全有关新闻 华为云服务器的首页 嵌入式软件开发区鲸鱼小班 力控吧数据库数据读入到变量 南通小型软件开发价格大全 长宁区项目数据库销售价格 重大节点网络安全保障风险点 护苗网络安全三观后感 上海狼防网络技术有限公司 军工企业网络安全资质 魅族服务器出错
0