Can I use enum parameter into JpaRepository nativeQuery?

前端 未结 4 952
温柔的废话
温柔的废话 2020-12-30 00:44

Entity looks like this:

@Getter
@Setter
@Entity
public class Application {
@Id
private Long id;
@Enumerated(EnumType.STRING)
private ApplicationStatus status         


        
相关标签:
4条回答
  • 2020-12-30 01:20

    You could convert to string before passing the params.

    0 讨论(0)
  • 2020-12-30 01:23

    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()}

    0 讨论(0)
  • 2020-12-30 01:24

    how about this?

    public interface ApplicationRepository extends JpaRepository<Application, Long> {
    List<Application> findByStatus(ApplicationStatus status);
    
    0 讨论(0)
  • 2020-12-30 01:39

    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()]}
    
    0 讨论(0)
提交回复
热议问题