JPA - "版本化"实体,需要设计建议

Osw*_*Osw 5 java hibernate jpa

想象一下以下两个实体.Element是包含一些数据的简单类:

@Entity
public class Element {
    private String data;

    public String getData() { return data; }    
    public void setData(String data) { this.data = data; }
}
Run Code Online (Sandbox Code Playgroud)

下一个类,名为VersionedElement,扩展Element并包含不同版本以及当前版本.这是我的"解决方案":

@Entity
public class VersionedElement extends Element {
    private Set<Element> versions;
    private Element currentVersion;

    @Override
    public String getData() {
        return getCurrentVersion().getData();
    }

    @Override
    public void setData(String data) {
        getCurrentVersion().setData(data);
    }

    @OneToMany
    public Set<Element> getVersions() {
        return versions;
    }

    public void setVersions(Set<Element> versions) {
        this.versions = versions;
    }

    @ManyToOne
    public Element getCurrentVersion() {
        return currentVersion;
    }

    public void setCurrentVersion(Element currentVersion) {
        this.currentVersion = currentVersion;
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我不喜欢我写的东西,错误的东西,太简单的方法.首先,在后一类currentVersion中不受限制且与之无关versions.看起来代码缺少一些辅助类,或抽象级别,或JPA注释技术,或以上所有.对于这个简单的案例,我需要一个优雅的,值得JPA手动解决方案.任何提示,链接或代码片段将不胜感激.

Luc*_*ira 13

如果你想要一个随时可用的hibernate实体版本控制解决方案,试试hibernate-envers.它将使对象版本控制/审计变得轻而易举.查看http://docs.jboss.org/envers/docs/index.html上的文档

欢呼,祝你好运!