JPA - позаботиться о многих по запросу - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть Entity Workflow, который имеет отношение @OneToMany с классом ValidationResults.Это извлечение Lazy, но иногда я хотел бы получить все рабочие процессы и позаботиться о том, чтобы они обращались к ValidationResults.В этот момент я хочу, чтобы jpa ждала все данные, а не запрашивала каждый раз, когда я получаю доступ к ValidationResults.Я использую springDataJpa, как это сделать, есть ли способ сделать это с @Query?

Я пытаюсь добиться чего-то подобного, но я не знаю, как

   //here all the workflows has corresponding data eagerly
    List<Workflow> workflows = workflowService.getAllWorkflowsWithValidationResultsEagerly();

    //here validationResults ref is lazy, when I try to access it it does query
    List<Workflow> workflows = workflowService.getAllWorkflowsUsually();

Здесьмои сущности.

@Entity
@Table(name = "workflow")
public class Workflow {

     ..............   

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "workflow", cascade = CascadeType.ALL)
    private Set<ValidationResults> validationResultsSet = new HashSet<>();

    public Set<ValidationResults> getValidationResultsSet(){return this.validationResultsSet;}
    ...............
}

И класс ValidationResult

@Entity
@Table(name = "validation_results")
public class ValidationResults {
...
    @ManyToOne
    @JoinColumn(name = "workflow_id", insertable = false, updatable = false)
    private Workflow workflow;

 ....
}

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Если вы не хотите создавать другой запрос, просто вызовите .size () вашего списка

0 голосов
/ 18 сентября 2018

Пружинный способ загрузки осуществляется с помощью @ EntityGraph , как описано в документации.

0 голосов
/ 18 сентября 2018

Вы можете использовать извлечение соединения, чтобы сделать это на @Query https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/fetch-join.html

@Query("SELECT DISTINCT e FROM Employee e INNER JOIN FETCH e.tasks t")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...