从数据模型访问同级数据

问题描述 投票:0回答:1

在我的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根实例存储在DB中,该DB保存到文件并从文件加载。因此,我总是有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实例。我之前从未使用过依赖注入,这是一个很好的方法吗?

我是否可能需要改变我的整个方法?

任何建议和意见表示赞赏。

java database jpa dependency-injection dependencies
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.