spring boot data jpa 創建表中長文本字段


0.使用場景

  • 搭建個人博客時存儲博客內容
  • 在線商城系統中對商品的描述

1.如何創建

  • 需要用到的注解
    1. @Lob

      @Lob標注表示將屬性映射成數據庫支持的大對象類型,Clob或者Blog。其中:

    • Clob(Character Large Ojects)類型是長字符串類型,java.sql.Clob、 Character[]、char[] 和 String 將被映射為 Clob 類型。
    • Blob(Binary Large Objects)類型是字節類型,java.sql.Blob、Byte[]、byte[] 和 實現了Serializable接口的類型將被映射為 Blob 類型。
    1. @Basic

      @Basic表示屬性到數據庫表的字段的映射。一個@Entity標注的實體類中的屬性,如果沒有任何標注,默認即為@Basic,比如User類中的name和email屬性。
      @Basic有兩個常用屬性:

      • fetch: 表示實體類對應屬性的讀取策略,有EAGER和LAZY兩種取值,分別表示主動抓取和延遲加載,默認值為EAGER。
      • optional:表示該屬性是否允許為null,默認值為true。
        因為這兩種類型(Clob or Blob)的數據一般占用的內存空間比較大,所以通常使用延遲加載的方式,與@Basic標注同時使用,設置加載方式為FetchType.LAZY。
    2. @Column(columnDefinition = "text")

      當實體類的屬性與其映射的數據庫表的列名稱不同時,可以使用@Colunm標注。該標注描述了數據庫表中該字段的詳細定義

      columnDefinition:表示該字段在數據庫中的實際類型。通常ORM框架可以根據屬性類型自動判斷數據庫中字段的類型,但是依然有些例外:

      • Date類型無法確定數據庫中字段類型究竟是DATE、TIME還是TIMESTAMP
      • String的默認映射類型為VARCHAR,如果希望將String類型映射到特定數據庫的BLOB或TEXT字段類型,則需要進行設置
  • 實例代碼
@Entity
public class Commodity {//商品
  @Id @Column(length = 20) private String cid; 
  @Column(length = 40) private String cname;
  private Integer price;//價格
  private Integer stock_quantity;//庫存數量
  private Integer Sales_volume;//銷售數量
  @Lob @Basic(fetch = FetchType.LAZY) @Column(columnDefinition = "text") private String description;//商品商品描述
  @ManyToOne(cascade = CascadeType.ALL) private  Category category;
  public Commodity(){

  }

  public String getCid() {
      return cid;
  }

  public void setCid(String cid) {
      this.cid = cid;
  }

  public String getCname() {
      return cname;
  }

  public void setCname(String cname) {
      this.cname = cname;
  }

  public Integer getPrice() {
      return price;
  }

  public void setPrice(Integer price) {
      this.price = price;
  }


  public String getDescription() {
      return description;
  }

  public void setDescription(String description) {
      this.description = description;
  }

  public Integer getStock_quantity() {
      return stock_quantity;
  }

  public void setStock_quantity(Integer stock_quantity) {
      this.stock_quantity = stock_quantity;
  }

  public Integer getSales_volume() {
      return Sales_volume;
  }

  public void setSales_volume(Integer sales_volume) {
      Sales_volume = sales_volume;
  }

  public Category getCategory() {
      return category;
  }

  public void setCategory(Category category) {
      this.category = category;
  }
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM