解決springboot jpa @Column columnDefinition等屬性失效問題
jpa @Column columnDefinition屬性失效
刪除一條屬性,默認(rèn)false
#spring.jpa.properties.hibernate.globally_quoted_identifiers=true
原因
開啟后, 創(chuàng)建sql語句執(zhí)行時(shí)會(huì)添加'`', 會(huì)造成columnDefinition 屬性失效, author: dreamlu
例如
1.屬性設(shè)置為true
alter table `xxx` add column `xxx` `varchar(50) default ''` // sql 語法錯(cuò)誤
2.屬性為false
alter table xxx add column xx varchar(50) default '' // 執(zhí)行成功
可以看出: 有舍有得,第二種要求字段/表等命名不能和mysql或其他數(shù)據(jù)庫中關(guān)鍵字重名
jpa column注解
知識(shí)點(diǎn)
@Column注解一共有10個(gè)屬性,這10個(gè)屬性均為可選屬性,各屬性含義分別如下:
name:name屬性定義了被標(biāo)注字段在數(shù)據(jù)庫表中所對(duì)應(yīng)字段的名稱;unique:unique屬性表示該字段是否為唯一標(biāo)識(shí),默認(rèn)為false。如果表中有一個(gè)字段需要唯一標(biāo)識(shí),則既可以使用該標(biāo)記,也可以使用@Table標(biāo)記中的@UniqueConstraint。nullable:nullable屬性表示該字段是否可以為null值,默認(rèn)為true。insertable:insertable屬性表示在使用“INSERT”腳本插入數(shù)據(jù)時(shí),是否需要插入該字段的值。updatable:updatable屬性表示在使用“UPDATE”腳本插入數(shù)據(jù)時(shí),是否需要更新該字段的值。insertable和updatable屬性一般多用于只讀的屬性,例如主鍵和外鍵等。這些字段的值通常是自動(dòng)生成的。columnDefinition:columnDefinition屬性表示創(chuàng)建表時(shí),該字段創(chuàng)建的SQL語句,一般用于通過Entity生成表定義時(shí)使用。(也就是說,如果DB中表已經(jīng)建好,該屬性沒有必要使用。)table:table屬性定義了包含當(dāng)前字段的表名。length:length屬性表示字段的長度,當(dāng)字段的類型為varchar時(shí),該屬性才有效,默認(rèn)為255個(gè)字符。precision和scale:precision屬性和scale屬性表示精度,當(dāng)字段類型為double時(shí),precision表示數(shù)值的總長度,scale表示小數(shù)點(diǎn)所占的位數(shù)。
precision和scale疑點(diǎn)
@Table(name = "CUSTOMERS")
@Entity
public 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;
......
}
數(shù)據(jù)庫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;
小結(jié)一下
1.double類型若在columnDefinition屬性中指定數(shù)字類型為decimal并指定精度,則最終以columnDefinition為準(zhǔn) (oracle數(shù)據(jù)庫中除外,其指定為float類型,因?yàn)閛racle數(shù)據(jù)庫沒有double類型,若針對(duì)oracle數(shù)據(jù)庫進(jìn)行精確,則改為
@Column(name = "Salary1", columnDefinition = "decimal(5,2)") //或columnDefinition = "number(5,2)"
private Float salary1;
2.double類型將在數(shù)據(jù)庫中映射為double類型,precision和scale屬性無效
3.BigDecimal類型在數(shù)據(jù)庫中映射為decimal類型,precision和scale屬性有效
4.precision和scale屬性只在BigDecimal類型中有效
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Hibernate實(shí)現(xiàn)many-to-many的映射關(guān)系
今天小編就為大家分享一篇關(guān)于Hibernate實(shí)現(xiàn)many-to-many的映射關(guān)系,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
springboot中nacos-client獲取配置的實(shí)現(xiàn)方法
本文主要介紹了springboot中nacos-client獲取配置的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解,二分查找算法是一種在有序數(shù)組中查找某一特定元素的搜索算法,其思想就是不斷地將有序查找表“一分為二”,逐漸縮小搜索區(qū)域,進(jìn)而找到目標(biāo)元素,需要的朋友可以參考下2023-12-12
springsecurity實(shí)現(xiàn)攔截器的使用示例
Spring Security 可以替代攔截器,同時(shí)還可以提供更加細(xì)粒度的權(quán)限控制和身份認(rèn)證,本文就來介紹一下springsecurity實(shí)現(xiàn)攔截器的使用示例,感興趣的可以了解一下2023-10-10
jpa實(shí)現(xiàn)多對(duì)多的屬性時(shí)查詢的兩種方法
這篇文章主要介紹了jpa實(shí)現(xiàn)多對(duì)多的屬性時(shí)查詢的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Android Studio中ButterKnife插件的安裝與使用詳解
本篇文章主要介紹了Android Studio中ButterKnife插件的安裝與使用詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

