本篇內容主要講解“如何解決springboot jpa@Column columnDefinition等屬性失效問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何解決springboot 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或其他數據庫中關鍵字重名
@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個字符。
precision
和scale
:precision屬性和scale屬性表示精度,當字段類型為double時,precision表示數值的總長度,scale表示小數點所占的位數。
@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; ...... }
數據庫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等屬性失效問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。