【Hibernate】 註解 (TEXT,LONGTEXT )

MySQL中Text, MeduimText, LongText在Hibernate中的設置mysql

MySQL 數據庫的varchar類型在4.1如下的版本中的最大長度限制爲255,其數據範圍能夠是0~255或1~255(根據不一樣版本數據庫來定)。在 MySQL5.0以上的版本中,varchar數據類型的長度支持到了65535,也就是說能夠存放65532個字節的數據,起始位和結束位佔去了3個字 節,也就是說,在4.1或如下版本中須要使用固定的TEXT或BLOB格式存放的數據能夠使用可變長的varchar來存放,這樣就能有效的減小數據庫文 件的大小。sql

在 mysql 的表中設置了一個字段的屬性爲 LONGTEXT,在運行 hibernate 的時候,發現保存,建議將 longtext 轉換爲 varchar(65535)數據庫

後來發現是 在 hibernate 中的pojo類中沒有加註解 以下所示:fetch

private String dtaContent;
  @Lob(type = LobType.CLOB, fetch = FetchType.LAZY)
  @Column
  public String getDtaContent() {
    return dtaContent;
  }
Hibernate會默認對應到MySQL的Text上去。Text是有65535字節限制的。

改爲:ui

private String dtaContent;
  @Lob(type = LobType.CLOB, fetch = FetchType.LAZY)
  @Column(length = 16777215)
  public String getDtaContent() {
    return dtaContent;
  }
Hibernate會對應到MySQL的MeduimText上去。MedumnText最大16777215字節。

改爲:hibernate

private String dtaContent;
  @Lob(type = LobType.CLOB, fetch = FetchType.LAZY)
  @Column(length = 16777216)
  public String getDtaContent() {
    return dtaContent;
  }
hibernate會對應到MySQL的LongText上去。LongText最大2147483647字節。
@Lob 一般與@Basic同時使用,提升訪問速度。 
@Lob 
@Basic(fetch = FetchType.LAZY) 
@Column(name="DtaContent", columnDefinition="CLOB", nullable=true) 
 public String getDtaContent() {
    return dtaContent;
  }

@Basic 實體Bean中全部的非Statictransient的屬性均可以被持久化,沒有定義註解屬性的等價於在其上添加了**@Basic註解 經過@Basic註解能夠聲明屬性的獲取策略(lazy與否),默認的是即時獲取(early fetch),這裏又討論到了 延遲關聯獲取和延遲屬性獲取,一般不須要對簡單屬性設置延遲獲取,如須要定義@Basic(fetch=FetchType.LAZY) ** 提示爲found text,excepted clob 改成**columnDefinition="TEXT"**就能夠了。code

相關文章
相關標籤/搜索