Весна JPA. Как получить только список идентификаторов с помощью @Query - PullRequest
1 голос
/ 07 августа 2020

Я пытаюсь написать это, чтобы получить список, и мне нужно передать список идентификаторов в качестве параметра:

@Query(value = "SELECT OutbreakDiagnosticTests FROM OutbreakDiagnosticTests WHERE OutbreakDiagnosticTests.outbreaks  in (:outbreakIds) ")
List<OutbreakDiagnosticTests> getDiagnosticTestsByOutbreaks(@Param("outbreakIds") List<Long> outbreakIds);

Моя сущность - это то, что я использую для запроса:

@Entity
@EntityListeners(OutbreakDiagnosticTestManagerImpl.class)
@Table(name = "outbreak_diagnostic_tests")
public class OutbreakDiagnosticTests extends AbstractTemporalWorkingData implements Serializable{
  
/**
   * 
   */
  private static final long serialVersionUID = 636298998880960358L;

  @Id
  @Column(nullable = false, name = "obdt_id")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long obdtId;

  @Column(nullable = false, name = "nature", length = 255)
  private String nature;

  @Column(nullable = true, name = "diagnostic_test_req", length = 255)
  private String diagnosticTestReq;

  @OneToMany(mappedBy = "outbreakDiagnosticTests", cascade = CascadeType.ALL, orphanRemoval = true)
  @Filter(name = "workingData")
  private Set<TestsResults> testsResults;

  @ManyToOne
  @JoinColumn(name = "outbreak_id", nullable = false)
  private Outbreaks outbreaks;

  @ManyToOne
  @JoinColumn(name = "diag_test_id", nullable = true)
  private DiagnosticTests diagTests;

  @ManyToOne
  @JoinColumn(name = "lab_id", nullable = true)
  private Laboratories lab;

  @Column(nullable = false, name = "is_field")
  private Boolean isField = false;

Но я получаю это исключение после запуска:

Error creating bean with name 'labTestSummariesDaoImpl': Unsatisfied dependency expressed through field 'obDiagTestRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'outbreakDiagnosticTestRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.wahisplus.wcommon.repository.outbreak.OutbreakDiagnosticTestRepository.getDiagnosticTestsByOutbreaks(java.util.List)!

Может ли кто-нибудь помочь мне получить список, используя вышеуказанный метод, или может сказать мне, что я делаю неправильно в этом. хотите использовать native ie (nativeQuery = true), используя this.

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Поскольку вы уже используете Spring Data JPA, предоставляется метод OOTB: List findAllById (Iterable ids);

Этот метод принимает список ненулевых идентификаторов и возвращает вам записи для этих Ид. Поскольку вы не используете DTO Concept и не загружаете все столбцы для набора идентификаторов, почему бы не использовать этот метод для работы.

0 голосов
/ 07 августа 2020

Используйте псевдоним, например OutbreakDiagnosticTests o, а для выбора идентификатора используйте o.outbreaks.id и убедитесь, что вы правильно подключили репозиторий

@Query(value = "SELECT o FROM OutbreakDiagnosticTests o WHERE o.outbreaks.id IN (:outbreakIds) ")
List<OutbreakDiagnosticTests> getDiagnosticTestsByOutbreaks(@Param("outbreakIds") List<Long> outbreakIds);
...