使用JPA加载实体的最新版本

时间:2019-03-06 09:46:42

标签: jpa eclipselink

我有以下实体:

@Entity
public class Policy {
  @ID
  private String uuid;

  private String policyId;

  private Long version;

  private Long auditVersion;
}

@Entity
public class PolicySearch {
  @ID
  private String uuid;

  @ManyToOne(optional = false)
  @JoinColumn(name = "policy_id", referencedColumnName = "policy_id")
  private Policy policy;
}

基本上,我有一个保险单,可以在数据库(auditVersion)中跟踪所有更改。在进行一些较小的更改后,可以发布版本,即版本递增且auditVersion再次从0开始。每个数据库条目都有一个不同的UUID,但是对于一个策略的所有版本,insuranceId都保持不变。

问题:我有一个要搜索的实体,搜索总是搜索策略的所有版本-这就是为什么我引用policyId而不是uuid的原因。当JPA加载实体时,我最终会采取任何政策。我希望有一种方法可以始终在给定引用的policyId的情况下获得策略的最高版本(以及该版本的最高auditVersion)。

我已经想到了以下方法,但是我对其中任何一种都不满意:

  1. 将引用的Policy的类型从Policy更改为String并仅保存policyId,这可以工作,但是我仍然想要外键约束,而且我似乎找不到找到使用JPA注释创建它的方法( JPA创建了我的数据库架构。)
  2. 按原样保留实体,但是在加载PolicySearch之后放弃加载的Policy,而采用最新的。可以在DAO中完成此操作,但是如果将来有任何实体将PolicySearch作为成员,那么这似乎是个坏主意。

任何帮助将不胜感激。我使用EclipseLink。

0 个答案:

没有答案