在Java应用程序中,我通过JPA保留了应用程序的整个状态。因此,我有一个根Data
类,它包含与其他数据对象的关系,例如Settings
或Metadata
:
@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
实例。我以前从未使用过依赖注入,这是一个好方法吗?
也许我需要改变整个方法吗?
任何建议和意见都会受到赞赏。
答案 0 :(得分:1)
选项2是JPA中的常用方法。使用双向映射,您将向上层次结构。为每个类添加反向字段不会导致数据库模型或性能问题的任何更改。