长时间用户,第一次在这里发布海报。
我们有一个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类的实体时将其保存到磁盘。嵌入此类的实体可能会频繁加载,但我很少需要从磁盘检索文件,所以我想:
回调不适用于嵌入式对象,所以我不能使用它们来保存和清理删除,但我不希望嵌入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。
所以在漫无目的之后,问题是: