我在将实体的属性设置为延迟加载时遇到了一些麻烦。我已经浏览了EclipseLink文档,但无法弄清楚我做错了什么。
基本上,我有一个包含一些列的表,其中一个是文件,其大小可能非常大。我想让文件本身延迟加载,这样当我加载表的所有行时,如果不使用它,我就不必等待文件加载到内存中。
设置:
EclipseLink 2.6.2
ReportHistoryFile:
@Entity
@Table(name = "REPORT_HISTORY_FILES")
@NamedQueries({
@NamedQuery(name = "ReportHistoryFile.findAll", query = "SELECT p FROM ReportHistoryFile p order by p.createDate DESC")})
public class ReportHistoryFile implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "SEQ_REPORTHISTORYFILE_GEN", sequenceName = "SEQ_REPORTHISTORYFILE", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_REPORTHISTORYFILE_GEN")
private Long fileId;
// note the basic lazy setting
@Basic(fetch = FetchType.LAZY)
@Column(name = "FILE_CONTENT", nullable = false)
private byte[] fileContent;
@Column(name = "FILE_NAME", nullable = false)
private String fileName;
private String contentType;
@Column(name = "FILE_SIZE")
private Long fileSize;
@Column(name = "CREATEDATE")
private Date createDate;
public ReportHistoryFile() {
}
public Long getFileId() {
return fileId;
}
public void setFileId(Long fileId) {
this.fileId = fileId;
}
public byte[] getFileContent() {
if (fileContent == null) {
return null;
}
return Arrays.copyOf(fileContent, fileContent.length);
}
public void setFileContent(byte[] fileContentIn) {
if (fileContentIn != null) {
this.fileContent = Arrays.copyOf(fileContentIn, fileContentIn.length);
}
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public Long getFileSize() {
return fileSize;
}
public void setFileSize(Long fileSize) {
this.fileSize = fileSize;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getCreateDate() {
return this.createDate;
}
}
但是当我执行这段代码时(em
是EntityManager):
List<ReportHistoryFile> list = null;
try {
list = (List<ReportHistoryFile>) em.createNamedQuery("ReportHistoryFile.findAll")
.getResultList();
} catch (javax.persistence.NoResultException e) {
log.info("No Report History File records found.");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
我看到这打印到控制台:
[EL Fine]:sql:2017-01-25 10:35:44.223 - ServerSession(1159663071) - 连接(39105078) - SELECT FILEID,CONTENTTYPE,CREATEDATE,FILE_CONTENT,FILE_NAME,FILE_SIZE来自REPORT_HISTORY_FILES ORDER BY CREATEDATE DESC
请注意,FILE_CONTENT仍在语句中。我错过了什么?我认为我的persistence.xml文件中没有任何特殊内容可用于基本的延迟加载,但我可能错了。提前谢谢!