【发布时间】:2015-11-24 13:16:06
【问题描述】:
在我们的 Spring MVC - Hibernate 项目中,我们通过 Web 服务存储上传的文件。但是,我们还将与文件相关的信息保存在数据库的表中。 File 类的简化版本如下:
@Entity
@Table(name="FILE")
public class File {
@Id
@Column(name="ID")
public int id;
@Column(name="NAME")
public String name;
@Transient
public byte[] data;
public int getId() {
}
public void setId(int id) {
}
public String getName() {
}
public void setName(String name) {
}
public byte[] getData() {
}
public void setData(byte[] data) {
}
}
我们从我们的数据库中加载 File 实体并从 Web 服务中获取其数据,如下所示:
File file = dao.getFileById({file_id});
byte[] data = webService.getFileData({file_id});
file.setData(data);
我们在代码中的很多地方都使用了 File 实体,每次我们编写查询来获取 File 时,我们都必须调用 Web 服务方法来加载其数据。我们还必须为其他具有到 File 类的映射的实体执行此操作,如下所示:
@Entity
@Table(name="PATIENT_FILE")
PatientFile {
...
@ManyToOne
@JoinColumn(name="FILE_ID")
File file;
...
}
现在,每当我们从数据库加载 PatientFile 时,我们都必须手动从 Web 服务获取文件的二进制数据。
有没有办法让 Hibernate 自动执行此操作,以便每当加载 File 实体时,Hibernate 从 Web 服务获取其数据以填充 File 对象的数据字段?
注意:我知道我可以在 File 类中实现 Lifecycle 接口并重写 onLoad 方法来执行此操作,但我需要一个更集中的解决方案。另外,从模型中调用数据层方法也不是很好。
【问题讨论】:
标签: spring hibernate web-services spring-mvc