Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring中jpa实体延迟加载文件的推荐模式_Java_Spring_Jpa - Fatal编程技术网

Java spring中jpa实体延迟加载文件的推荐模式

Java spring中jpa实体延迟加载文件的推荐模式,java,spring,jpa,Java,Spring,Jpa,长期用户,第一次张贴在这里 我们有一个jpa可嵌入类,用于跟踪文件。看起来像是这些加上我去掉的不相关的东西 @Embeddable public class Blob { @Column(name="FILE_ID", length=64) private String blobFile; @Column(name="PATH", length=256) private String path; @Column(name="SIZE") private long size; @Trans

长期用户,第一次张贴在这里

我们有一个jpa可嵌入类,用于跟踪文件。看起来像是这些加上我去掉的不相关的东西

@Embeddable
public class Blob {

@Column(name="FILE_ID", length=64)
private String blobFile;

@Column(name="PATH", length=256)
private String path;

@Column(name="SIZE")
private long size;

@Transient
private byte[] data;

... stuff ...

public byte[] getData() { return data; }
}
最初,类Blob包含用于实际读取和写入文件系统的代码,我已将其移动到类似于这样的Spring组件(再次简化),现在代码库的其他区域需要文件系统访问

interface FileSystem {
    public void writeFile(String filepath, byte[] bytes);
    public byte[] readFile(String filepath);
}
设置byte[]数据后,我希望在保存嵌入Blob类的实体时将其保存到磁盘。嵌入此类的实体可能会非常频繁地加载,但我很少需要从磁盘检索文件,因此我想:

  • 仅当代码请求时加载文件
  • 使用我的spring组件加载文件
回调对嵌入对象不起作用,所以我不能使用它们在保存时进行持久化,在删除时进行清理,但我不希望嵌入Blob的每个实体都需要在其自己的回调中手动调用save和cleanup方法,我更希望嵌入对象尽可能自包含

另一个问题实际上是访问文件系统的Springbean,我在jpa实体或entitylistener类中访问了Springbean,看起来有点难看,请参见和

因此,在所有这些漫无边际的讨论之后,问题是:

  • 是否有一个既定的模式来实现我的目标
  • 或者我这样做是错误的,我不应该访问实体中的文件系统,而是在更高的级别向实体请求数据,即getFilePath(),然后在那里查找文件