最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

hibernate普通字段延迟加载无效的解决办法

来源:懂视网 责编:小采 时间:2020-11-09 14:54:49
文档

hibernate普通字段延迟加载无效的解决办法

hibernate普通字段延迟加载无效的解决办法:关联对象的延迟加载就不说了,大家都知道。 关于普通字段的延迟加载,尤其是lob字段,若没有延迟加载,对性能影响极大。然而简单的使用 @Basic(fetch = FetchType.LAZY) 注解并没有效果。hibernate对此的解释是Lazy property loading
推荐度:
导读hibernate普通字段延迟加载无效的解决办法:关联对象的延迟加载就不说了,大家都知道。 关于普通字段的延迟加载,尤其是lob字段,若没有延迟加载,对性能影响极大。然而简单的使用 @Basic(fetch = FetchType.LAZY) 注解并没有效果。hibernate对此的解释是Lazy property loading

关联对象的延迟加载就不说了,大家都知道。 关于普通字段的延迟加载,尤其是lob字段,若没有延迟加载,对性能影响极大。然而简单的使用 @Basic(fetch = FetchType.LAZY) 注解并没有效果。hibernate对此的解释是Lazy property loading requires buildtime byt

关联对象的延迟加载就不说了,大家都知道。

关于普通字段的延迟加载,尤其是lob字段,若没有延迟加载,对性能影响极大。然而简单的使用 @Basic(fetch = FetchType.LAZY) 注解并没有效果。hibernate对此的解释是Lazy property loading requires buildtime bytecode instrumentation. If your persistent classes are not enhanced, Hibernate will ignore lazy property settings and return to immediate fetching.

而bytecode instrumentation的介绍可以参考http://www.correlsense.com/blog/java-bytecode-instrumentation-an-introduction/,本文不多作介绍。

正是因为我们的persistent classes没有使用bytecode instrumentation增强,才导致了普通字段无法延迟加载。

因此要改写一下。以下为一个使用了bytecode instrumentation的持久类:

public class PublicSchemeTaskFile implements java.io.Serializable , FieldHandled {
 // Fields 

 /**
	 * 
	 */
 private static final long serialVersionUID = -8297912895820802249L;
 private Integer id;
 private PublicTask publicSchemeTask;
 private Integer fileType;
 private String fileName;
 private byte[] content;
 
 private FieldHandler fieldHandler;//用于延迟加载表字段,关联对象延迟加载的话无需此技术
 	
 	@JSON(serialize = false)
 	public FieldHandler getFieldHandler() {
 	return fieldHandler;
 	}

 	public void setFieldHandler(FieldHandler fieldHandler) {
 	this.fieldHandler = fieldHandler;
 	}
 // Constructors

 /** default constructor */
 public PublicSchemeTaskFile() {
 }

	/** minimal constructor */
 public PublicSchemeTaskFile(Integer id) {
 this.id = id;
 }

	// Property accessors
 @Id 
 
 @Column(name="ID", unique=true, nullable=false, precision=22, scale=0)
 @GeneratedValue(strategy=GenerationType.SEQUENCE,generator = "PUBLIC_SCHEME_TASK_FILE_SEQ")
 public Integer getId() {
 return this.id;
 }
 
 public void setId(Integer id) {
 this.id = id;
 }
 @JSON(serialize = false)
	@ManyToOne(fetch=FetchType.LAZY)
 @JoinColumn(name="PUBLIC_TASK_ID")

 public PublicTask getPublicSchemeTask() {
 return this.publicSchemeTask;
 }
 
 public void setPublicSchemeTask(PublicTask publicSchemeTask) {
 this.publicSchemeTask = publicSchemeTask;
 }
 
 @Column(name="FILE_TYPE", precision=22, scale=0)

 public Integer getFileType() {
 return this.fileType;
 }
 
 public void setFileType(Integer fileType) {
 this.fileType = fileType;
 }
 
 @Column(name="FILE_NAME", length=50)

 public String getFileName() {
 return this.fileName;
 }
 
 public void setFileName(String fileName) {
 this.fileName = fileName;
 }
 @JSON(serialize = false)
 @Lob
 @Basic(fetch = FetchType.LAZY) 
 @Column(name="CONTENT")

 public byte[] getContent() {
 	 if (fieldHandler != null) {
	 return (byte[]) fieldHandler.readObject(this, "content", content);
	 }
	 return null;
 }
 
 public void setContent(byte[] content) {
 this.content = content;
 }

	@Override
	public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	return result;
	}

	@Override
	public boolean equals(Object obj) {
	if (this == obj)
	return true;
	if (obj == null)
	return false;
	if (getClass() != obj.getClass())
	return false;
	PublicSchemeTaskFile other = (PublicSchemeTaskFile) obj;
	if (id == null) {
	if (other.id != null)
	return false;
	} else if (!id.equals(other.id))
	return false;
	return true;
	}
}

关键在于FieldHandled接口和lob字段的getter

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

hibernate普通字段延迟加载无效的解决办法

hibernate普通字段延迟加载无效的解决办法:关联对象的延迟加载就不说了,大家都知道。 关于普通字段的延迟加载,尤其是lob字段,若没有延迟加载,对性能影响极大。然而简单的使用 @Basic(fetch = FetchType.LAZY) 注解并没有效果。hibernate对此的解释是Lazy property loading
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top