适用于jpa实体的延迟加载文件的推荐模式

时间:2015-11-20 13:39:39

标签: 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;

@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方法在他们自己的回调中手动,我更倾向于Embeddable尽可能自包含。

另一个问题实际上是访问文件系统的spring bean,我已经查看了如何访问jpa实体或entitylistener类中的spring bean,看起来有点难看,请参阅http://www.simonellistonball.com/technology/injecting-dependencies-into-a-jpa-entitylistener/Injecting spring bean in a JPA Entity Listener

所以在漫无目的之后,问题是:

  1. 是否有既定的模式可以实现我的目标?
  2. 或者我是以错误的方式解决这个问题而且我不应该访问实体中的文件系统,而是在更高级别向实体询问数据,即getFilePath(),然后在那里查找文件?

0 个答案:

没有答案