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如何懒加载大字段,懒加载之后又如何获取懒加载字段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python动态验证码_Python 模
- 下一篇: 单招湖南工业技术学院计算机难吗,解读湖南