从数据模型访问同级数据

时间:2019-03-03 16:57:20

标签: java database jpa dependency-injection dependencies

在Java应用程序中,我通过JPA保留了应用程序的整个状态。因此,我有一个根Data类,它包含与其他数据对象的关系,例如SettingsMetadata

@Entity
@Access(AccessType.FIELD)
public class Data {

    @Id
    @GeneratedValue
    private long id;

    @OneToOne(cascade = ALL)
    public Settings settings;

    @OneToOne(cascade = ALL)
    public Metadata metadata;

    // etc
}

要保存/加载状态,我只需将Data根实例存储在数据库中,该实例将保存到文件中或从文件中加载。因此,我总是有一个Data实例和一个Settings实例,等等。

在数据模型中,我有一个Result类,看起来像这样:

@Entity
@Access(AccessType.FIELD)
public class Result {

    @Id
    @GeneratedValue
    private long id;

    public int value;

    // etc
}

现在在这个Result类中,我需要访问当前加载的Settings实例。但是由于Result的实例是由JPA创建的,因此除了可用的相关数据模型之外,我没有其他任何引用。

如何最好地为每个Result实例授予对此Settings实例的访问权限?

到目前为止我的想法:

1)将当前加载的Data对象存储在静态变量中,并通过它访问Settings实例。出于明显原因,这很糟糕。

2)使每个数据模型类都引用各自的所有者,直到Data根类为止。但是,这意味着必须遍历整个数据模型直至根对象,才能访问其子对象。另外,这将意味着每个对象中都有一个附加字段。

3)使用依赖注入(Google Guice?)以某种方式在需要的地方注入正确的Settings实例。我以前从未使用过依赖注入,这是一个好方法吗?

也许我需要改变整个方法吗?

任何建议和意见都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

选项2是JPA中的常用方法。使用双向映射,您将向上层次结构。为每个类添加反向字段不会导致数据库模型或性能问题的任何更改。