博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jpa如何懒加载大字段,懒加载之后又如何获取懒加载字段
阅读量:5964 次
发布时间:2019-06-19

本文共 3468 字,大约阅读时间需要 11 分钟。

前言:对于大字段,我们在查询列表的时候不需要查询,但是修改的时候有需要展示大字段内容,怎么办

问1.jpa如何懒加载大字段?即查询列表的时候不查询出来

问2.懒加载之后又如何获取懒加载字段。比如,在后台修改的实体的时候,需要展示内容,如何获取detail内容(懒加载,它没有加载)

1.jpa如何懒加载大字段?detail是我的大字段

@Entity

public class ParkDynamics extends TemporalEntity implements FieldHandled{},实现FieldHandled

具体实体代码如下

@Entitypublic class ParkDynamics extends TemporalEntity implements FieldHandled {    private String title; //标题    private String content; //内容    private String status; //状态 (0:不可见;1:可见)    private String remarks; //备注    private String creatorName;    private String updatorName;    @Lob    @Basic(fetch = FetchType.LAZY)    @Column(name="detail")    private String detail;//图文交替型内容(用文本编辑器)    @OneToMany(mappedBy = "parkDynamics",fetch = FetchType.EAGER)    private Set
parkDynamicsFiles = new HashSet<>(); //公园动态文件 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks; } public String getCreatorName() { return creatorName; } public void setCreatorName(String creatorName) { this.creatorName = creatorName; } public String getUpdatorName() { return updatorName; } public void setUpdatorName(String updatorName) { this.updatorName = updatorName; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Set
getParkDynamicsFiles() { return parkDynamicsFiles; } public void setParkDynamicsFiles(Set
parkDynamicsFiles) { this.parkDynamicsFiles = parkDynamicsFiles; } public String getDetail() { if (fieldHandler != null) { return (String) fieldHandler.readObject(this, "detail ", detail); } return null; } public void setDetail(String detail) { if(detail == null){ if(fieldHandler!=null){ fieldHandler.writeObject(this, "detail", this.detail, detail); return; } } this.detail = detail; } @Transient private FieldHandler fieldHandler;//用于延迟加载表字段,关联对象延迟加载的话无需此技术 @JsonIgnore public FieldHandler getFieldHandler() { return fieldHandler; } public void setFieldHandler(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@Servicepublic 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;	}}

  

 

转载于:https://www.cnblogs.com/longsanshi/p/9353736.html

你可能感兴趣的文章
python之UnittTest模块
查看>>
HDOJ_ACM_Rescue
查看>>
笔记纪录
查看>>
九、oracle 事务
查看>>
Git - 操作指南
查看>>
正则表达式的贪婪与非贪婪模式
查看>>
SqlServer存储过程调用接口
查看>>
DOM
查看>>
通过jQuery.support看javascript中的兼容性问题
查看>>
NYOJ-取石子
查看>>
AngularJS
查看>>
《zw版·Halcon-delphi系列原创教程》halconxlib控件列表
查看>>
List与数组的相互转换
查看>>
Computer Science Theory for the Information Age-4: 一些机器学习算法的简介
查看>>
socketserver模块使用方法
查看>>
json模块
查看>>
各型号英特尔CUP的功率
查看>>
scanf()中的%c 不能正常输入的问题
查看>>
PHP学习1——快速入门
查看>>
面试发散思维
查看>>