Hibernate:从Web服务填充一些字段

时间:2015-11-24 13:16:07

标签: spring hibernate web-services spring-mvc

在我们的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实体,每次我们编写查询来获取文件时,我们都必须调用Web服务方法来加载其数据。此外,我们必须为其他具有映射到File类的实体执行此操作,如下所示:

@Entity
@Table(name="PATIENT_FILE")
PatientFile {
    ...

    @ManyToOne
    @JoinColumn(name="FILE_ID")
    File file;

    ...
}

现在,每当我们从数据库加载PatientFile时,我们都必须从Web服务手动获取文件的二进制数据。

有没有办法让Hibernate自动执行此操作,以便每当加载文件实体时,Hibernate从Web服务获取其数据以填充File对象的数据字段?

注意:我知道我可以在File类中实现Lifecycle接口并覆盖onLoad方法来执行此操作,但我需要一个更集中的解决方案。另外,从模型中调用数据层方法并不好。

1 个答案:

答案 0 :(得分:1)

是的,您可以实施Hibernate Interceptor。通过实现在对象初始化之前调用的onLoad方法,您可以调用Web服务并填充数据。该方法必须检查它是否是您正在加载的File对象。