Это моя сущность:
@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 ("....")