Как построить Spring Data репозиторий запросить два параметра с IN и один и тот же список? - PullRequest
0 голосов
/ 21 марта 2019

Это моя сущность:

@Data
@Entity
@IdClass(EtlJobExecutionTriggersId.class)
@Table(name = "ETL_JOB_EXEC_TRIGGERS")
public class EtlJobExecutionTriggers {
    @Id private Long jobExecIdUs;
    @Id private Long jobExecIdDs;
    private LocalDate cobDate;
}

А вот класс составного первичного ключа:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
@EqualsAndHashCode
public class EtlJobExecutionTriggersId implements Serializable {
    private Long jobExecIdUs;
    private Long jobExecIdDs;
}

А вот и мой весенний репо:

public interface EtlJobExecTriggersRepo extends JpaRepository<EtlJobExecutionTriggers, EtlJobExecutionTriggersId> {
        String SQL_ = "select o from EtlJobExecutionTriggers o where o.jobExecIdDs in (:ids) or o.jobExecIdUs in (:ids) order by o.jobExecIdUs, o.jobExecIdDs";
        @Query(EtlJobExecTriggersRepo.SQL_)
        List<EtlJobExecutionTriggers> findAllByJobExecIdDsInAndJobExecIdUsInSQL(@Param("ids") List<Long> jobExecIdList);
    }

@Query работает, как и ожидалось, но я бы не хотел писать какой-либо SQL, а вместо этого выражать тот же запрос, используя только запрос репозитория Spring Data.

Я пробовал следующие (и другие варианты)

List<EtlJobExecutionTriggers> findAllByJobExecIdDsInAndJobExecIdUsInOrderByJobExecIdUsJobExecIdDs(List<Long> jobExecIdDsList)

Но я продолжаю получать ошибки при загрузке. Приведенный выше метод интерфейса выдает следующее исключение для части OrderBy:

org.springframework.data.mapping.PropertyReferenceException: No property jobExecIdDs found for type Long! Traversed path: EtlJobExecutionTriggers.jobExecIdUs.

Так, что я здесь не так делаю? или это невозможно выразить этот конкретный запрос через запрос Spring Data Repo?

Как я уже писал в своем комментарии, я исправил Порядок по проблеме, но я все еще не могу заставить его работать только с одним параметром метода (List jobExecIdList )

Когда я делаю это с двумя ( List jobExecIdDsList, List jobExecIdUsList )

Вот так:

List<EtlJobExecutionTriggers> findAllByJobExecIdDsInAndJobExecIdUsInOrderByJobExecIdUsAscJobExecIdDsAsc(List<Long> jobExecIdDsList, List<Long> jobExecIdUsList);

это на самом деле работает, но я не могу работать только с одним списком, как в методе @Query ("....")

Ответы [ 2 ]

1 голос
/ 21 марта 2019

// У вас должно быть два параметра в вашем методе, как показано ниже. List findAllByJobExecIdDsInAndJobExecIdUsInOrderByJobExecIdUsJobExecIdDs (список jobExecIdDsList, список jobExecIdUsList);

0 голосов
/ 21 марта 2019

Я думаю, что использование вашего собственного генератора идентификаторов конфликтует с запросом Spring Data Repository.

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