Entity looks like this:
@Getter
@Setter
@Entity
public class Application {
@Id
private Long id;
@Enumerated(EnumType.STRING)
private ApplicationStatus status
You could convert to string before passing the params.
Following similar question with similar requirement and one of the answers pointing to Spring Expression Language (SpEL) you could use:
public interface ApplicationRepository extends JpaRepository<Application, Long> {
@Query(nativeQuery = true, value = "SELECT app FROM #{#entityName} AS app WHERE app.status=:#{#status.name()}")
List<Application> find(@Param("status") ApplicationStatus status);
}
Above important part is app.status=:#{#status.name()}
how about this?
public interface ApplicationRepository extends JpaRepository<Application, Long> {
List<Application> findByStatus(ApplicationStatus status);
To extend @Aivaras answer: If you want to use list of statuses, SpEL ecpression is slightly different - you need to do projection:
public interface ApplicationRepository extends JpaRepository<Application, Long> {
@Query(nativeQuery = true, value = "SELECT app FROM #{#entityName} AS app WHERE app.status in :#{#statuses.![name()]}")
List<Application> find(@Param("statuses") List<ApplicationStatus> statuses);
}
Note the change of expression to
#{#statuses.![name()]}