激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JPA之映射mysql text類型的問題

JPA之映射mysql text類型的問題

2022-02-20 12:04Moshow鄭鍇 Java教程

這篇文章主要介紹了JPA之映射mysql text類型的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

JPA之映射mysql text類型

問題背景

jpa如果直接映射mysql的text/longtext/tinytext類型到String字段會報錯。需要設置一下@Lob和@Column。

@Lob代表是長字段類型,默認的話,是longtext類型,所以需要下面這個屬性來指定對應的類型。

columnDefinition="text"里面的類型可以隨意改,后面mysql可能會有新的類型,只要是對應java的String類型,就可以在這里動態(tài)配置。

解決方案

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Data
@Entity
@Table(name="question")
public class Question {
    @Id
    @GeneratedValue
    public int questionId;
    //....省略其他字段
    @Lob
    @Column(columnDefinition="text")
    public String explainStr;
    public Date createTime;
}

JPA各種類型映射處理

1.日期格式類型字段的映射,利用@Temporal(TemporalType.Date)進行注解;例如:

?
1
2
3
4
5
6
7
8
private Date birthday;
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}

2.枚舉類型的映射,利用@Enumerated,其參數(shù)EnumType表示指定存放在數(shù)據(jù)表中的形式,整型還是String;

首先創(chuàng)建一個枚舉:

?
1
2
3
4
public enum Gender
  {
Male,Female
}

在實體類中調用:

?
1
2
3
4
5
6
7
8
private Gender gender = Gender.Male;  // 為枚舉設置默認值
@Enumerated(EnumType.STRING)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}

3.大文本數(shù)據(jù)類型的映射,例如:網絡日志,字符串類型的長度顯然不夠,利用@Lob注解,該注解用在字符串類型之上在數(shù)據(jù)庫生成LongText類型的數(shù)據(jù);例如:

?
1
2
3
4
5
6
7
8
private String diary;
@Lob
public String getDiary() {
return diary;
}
public void setDiary(String diary) {
this.diary = diary;
}

4.@Lob注解用在Byte[]數(shù)組類型,例如:保存一個文件可以用此類型,用在這個上面在數(shù)據(jù)庫中可以生成LongBolb數(shù)據(jù)類型;例如:

?
1
2
3
4
5
6
7
8
private Byte[] file;
@Lob
public Byte[] getFile() {
return file;
}
public void setFile(Byte[] file) {
this.file = file;
}

5.如果在實體類中不需要該字段與數(shù)據(jù)庫中的表進行映射,但是默認的情況下是將實體類的全部字段映射成數(shù)據(jù)表的列,那該怎樣做呢?利用@Transient注解,例如:

?
1
2
3
4
5
6
7
8
private String other;
@Transient
public String getOther() {
return other;
}
public void setOther(String other) {
this.other = other;
}

6.如果一個實體類中包含一個大數(shù)據(jù)類型的字段,如Byte[]類型,當我們查詢該實體類時不得不查詢出該數(shù)據(jù)類型的字段,如果我們在查詢時只用到一個其它字段的數(shù)據(jù),但是默認情況下是查詢全部的,那該怎樣避免查詢該大數(shù)據(jù)類型的數(shù)據(jù)呢?利用@Basic注解進行標注,將fetch屬性值設置為Lazy即可,這樣只有在我們調用該屬性的get方法時才會進行加載;

?
1
2
3
4
5
6
7
8
private Byte[] file;
@Lob @Basic(fetch=FetchType.LAZY)
public Byte[] getFile() {
return file;
}
public void setFile(Byte[] file) {
this.file = file;
}

7.@Column 該注解表示數(shù)據(jù)表的映射列,放在屬性的getter方法上:

  • .length:該屬性表示該映射列的長度;
  • .nullable:該屬性表示該列是否可為空,true表示可為空,false表示不可為空;
  • .name:該屬性表示為該列起別名,不讓實體類的屬性名與數(shù)據(jù)庫的列名相同;

8.@Table 該注解表示映射的表;放在該實體類之上:

  • .name:該屬性表示為表起別名,讓實體類與數(shù)據(jù)表名不相同;

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://zhengkai.blog.csdn.net/article/details/82143590

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一级成人在线 | 国产精品一区二区手机在线观看 | 午夜久久久精品一区二区三区 | 亚州欧美视频 | av在线免费播放 | 国产精品一区二区三区在线播放 | 国产一区二区视频网站 | 日本高清黄色片 | 亚洲爱爱图 | 久久网一区二区 | 欧美一级黄色录像片 | www国产网站 | 精品亚洲视频在线 | 一级黄色在线观看 | 亚洲成a人在线 | 一级做a爱片毛片免费 | 久章草在线观看 | 91 久久| 97se亚洲综合在线韩国专区福利 | 成人一区二区三区四区 | 视频一区二区国产 | 日本中文高清 | 欧美一区二区三区久久精品视 | 久久观看免费视频 | 九九色网站| 欧美日韩国产精品 | 12av毛片| 欧产日产国产精品v | 欧洲精品视频在线观看 | 国产日韩线路一线路二 | 精品一区二区视频在线观看 | 国产精选久久久 | 久久久久久久一区 | 久久精片 | 精品久久中文字幕 | 广西一级毛片 | 亚a在线| 欧美黄色看 | 视频在线亚洲 | 欧美久久久一区二区三区 | 欧美成人免费在线视频 |