我有一个名为的类Program
,它包含一组文件(和其他基本属性),实现为它自己的类,表示关系模型中ProgramFile
的多值复合属性。Program
我正在使用带有 Hibernate 的 Spring Boot。
集合的ProgramFile
实现如下Program
:
...
@ElementCollection
@CollectionTable(
name = "GPI_PROGRAMAS_FICHEROS",
joinColumns = @JoinColumn(name = "ID_PROGRAMA")
)
private Set<ProgramFile> files;
...
的代码ProgramFile
是:
@Embeddable
public class ProgramFile {
@Column(name = "NOMBRE_FICHERO")
private @NonNull String fileName;
@Lob
@JsonIgnore
@Basic(fetch = FetchType.LAZY)
@Column(name = "FICHERO")
private byte[] file;
}
ProgramFile.file
是大型 PDF 文件,我的目标是序列化为Program
JSON。为了避免 N+1 问题,我使用 @EntityGraph 来提示 Hibernate 只执行一个 SQL 查询来检索所有数据:
@EntityGraph(
type = EntityGraph.EntityGraphType.LOAD,
attributePaths = {
"files"
}
)
List<Program> findAll(Specification<Program> spec);
我面临的问题是我只对 感兴趣ProgramFile.fileName
,而不对ProgramFile.file
. 因为后者是大文件,所以 SQL 查询会很慢,我不希望该属性包含在 JSON 中。
问题:有什么方法可以指示 Hibernate 不获取ProgramFile.file
或实现 JSON 序列化的替代方法,不包括它?