日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 懒加载数据_jpa如何懒加载大字段,懒加载之后又如何获取懒加载字段

發布時間:2024/7/23 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 懒加载数据_jpa如何懒加载大字段,懒加载之后又如何获取懒加载字段 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:對于大字段,我們在查詢列表的時候不需要查詢,但是修改的時候有需要展示大字段內容,怎么辦

問1.jpa如何懶加載大字段?即查詢列表的時候不查詢出來

問2.懶加載之后又如何獲取懶加載字段。比如,在后臺修改的實體的時候,需要展示內容,如何獲取detail內容(懶加載,它沒有加載)

1.jpa如何懶加載大字段?detail是我的大字段

@Entity

public class ParkDynamics extends TemporalEntity implements FieldHandled{},實現FieldHandled

具體實體代碼如下

@Entitypublic classParkDynamics extends TemporalEntity implements FieldHandled {private String title; //標題

private String content; //內容

private String status; //狀態 (0:不可見;1:可見)

private String remarks; //備注

privateString creatorName;privateString updatorName;

@Lob

@Basic(fetch=FetchType.LAZY)

@Column(name="detail")private String detail;//圖文交替型內容(用文本編輯器)

@OneToMany(mappedBy= "parkDynamics",fetch =FetchType.EAGER)private Set parkDynamicsFiles = new HashSet<>(); //公園動態文件

publicString getTitle() {returntitle;

}public voidsetTitle(String title) {this.title =title;

}publicString getContent() {returncontent;

}public voidsetContent(String content) {this.content =content;

}publicString getRemarks() {returnremarks;

}public voidsetRemarks(String remarks) {this.remarks =remarks;

}public String getCreatorName() { returncreatorName; }public void setCreatorName(String creatorName) { this.creatorName =creatorName; }public String getUpdatorName() { returnupdatorName; }public void setUpdatorName(String updatorName) { this.updatorName =updatorName; }publicString getStatus() {returnstatus;

}public voidsetStatus(String status) {this.status =status;

}public Set getParkDynamicsFiles() { returnparkDynamicsFiles; }public void setParkDynamicsFiles(Set parkDynamicsFiles) { this.parkDynamicsFiles =parkDynamicsFiles; }publicString getDetail() {if (fieldHandler != null) {return (String) fieldHandler.readObject(this, "detail", detail);

}return null;

}public voidsetDetail(String detail) {if(detail == null){if(fieldHandler!=null){

fieldHandler.writeObject(this, "detail", this.detail, detail);return;

}

}this.detail =detail;

}

@Transientprivate FieldHandler fieldHandler;//用于延遲加載表字段,關聯對象延遲加載的話無需此技術

@JsonIgnorepublicFieldHandler getFieldHandler() {returnfieldHandler;

}public voidsetFieldHandler(FieldHandler fieldHandler) {this.fieldHandler =fieldHandler;

}

}

2.對于懶加載的字段,如何獲取其內容呢

關鍵代碼如下:(String) fieldHandler.readObject(this, "detail ", detail);,相當于去讀對象的detail屬性,然后會真是的加載detail的內容。this代表實體對象,這樣實體對象就detail就有內容了。

但是實際如果不是在一個事務中是不行的。也就是獲得實體和使實體去加載懶加載的字段不在同一個事務中,你執行(String) fieldHandler.readObject(this, "detail ", detail)是會報錯的。

也就有了如下的代碼,對需要獲取實體全部內容的getById和getByType進行了封裝,放在一個事務service類中

@Transactional

@Service

public class AnimalClassServiceImpl implements AnimalClassService{

@Autowired

private AnimalClassRepository animalClassRepository;

@Override

public AnimalClass getById(Long id) {

AnimalClass animalClass = animalClassRepository.getById(id);

animalClass.setContent(null);

return animalClass;

}

@Override

public AnimalClass getFirstByType(String type) {

AnimalClass animalClass = animalClassRepository.getFirstByType(type);

animalClass.setContent(null);

return animalClass;

}

}

總結

以上是生活随笔為你收集整理的mysql 懒加载数据_jpa如何懒加载大字段,懒加载之后又如何获取懒加载字段的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。