在我的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
根实例存储在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
实例。我之前从未使用过依赖注入,这是一个很好的方法吗?
我是否可能需要改变我的整个方法?
任何建议和意见表示赞赏。
选项2是JPA中的常用方法。通过双向映射,您将进入层次结构。为每个类添加反向字段不会导致数据库模型或性能问题的任何更改。