溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決springboot jpa@Column columnDefinition等屬性失效問題

發布時間:2021-10-25 10:07:52 來源:億速云 閱讀:271 作者:iii 欄目:開發技術

本篇內容主要講解“如何解決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")
@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等屬性失效問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女