Связь Spring JPA @OneToOne с сущностью Envers - PullRequest
0 голосов
/ 29 мая 2020

Я использую Envers со Spring и ищу способ установить sh связь @OneToOne с определенной версией объекта.

Для простоты предположим, что у меня есть две сущности ...

@Entity
@Table
public class Orchestration {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne
    private Workflow workflow;

    // ...
}

@Entity
@Table
public class Workflow {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // ...
}

При сохранении я хотел бы, чтобы workflow отражал данные во время создания, а не самые последние. например, если я сохраню экземпляр Orchestration, то через некоторое время имя рабочего процесса изменится, этот экземпляр должен по-прежнему иметь старое имя.

Пока что я добавил private Integer rev; в Orchestration, чтобы сохранить номер редакции во время создания из revinfo и сделал Workflow @Transient, поэтому я не втягиваю автоматически обычный объект. Затем я добавил пользовательские запросы к OrchestrationRespoitory, например

@Query(value = "" +
        "select * from orchestration o " +
        "left join workflow_aud wa on o.workflow_id = wa.id " +
        "and wa.rev <= o.rev and (wa.revend > o.rev OR wa.revend IS NULL) " +
        "where wa.name = :workflowName",
       nativeQuery = true)
List<Orchestration> findAllByWorkflowName(@Param("workflowName") String workflowName);

Это работает нормально, но мне нужно вручную заполнить workflow после этого, используя ...

var result = auditReader().createQuery()
        .forEntitiesAtRevision(Workflow.class, orchestration.getRev())
        .add(AuditEntity.id().eq(orchestration.getWorkflowId()))
        .getSingleResult();
orchestration.setWorkflow((Workflow) result);

Что я надеюсь, что это способ удалить это @Transient и иметь workflow, отражающую версию, указанную rev, с прокси-геттерами и всеми другими магами c: D

Любые идеи, советы или мысли был бы очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...