У меня есть следующие объекты:
@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). После небольшого изменения версия может быть выпущена, и тогда версия увеличивается, и audVersion снова начинает 0. У каждой записи БД свой UUID, но страховой идентификатор остается одинаковым для всех версий одного полиса.
Проблема: у меня есть объект для поиска, поиск всегда ищет все версии политики - поэтому я ссылаюсь на policyId, а не на uuid. Когда JPA загружает объект, я получаю любую политику. Я хотел бы получить способ всегда получать наивысшую версию политики с учетом указанного идентификатора policyId (и наивысшего уровня audVersion этой версии).
Я думал о следующих путях, но я не доволен ни одним из них:
- Измените тип указанной Политики с Policy на String и сохраните только policyId, это будет работать, но я все еще хотел бы ограничение внешнего ключа, и я не могу найти способ создать его с аннотацией JPA ( JPA создает мою схему БД).
- Сохраните сущности как есть, но откажитесь от загруженной Политики в пользу самой новой после загрузки PolicySearch. Это может быть сделано в DAO, но если в будущем какой-либо объект будет иметь PolicySearch в качестве члена, это кажется очень плохой идеей.
Любая помощь будет принята с благодарностью. Я использую EclipseLink.