问题
Entity looks like this:
@Getter
@Setter
@Entity
public class Application {
@Id
private Long id;
@Enumerated(EnumType.STRING)
private ApplicationStatus status;
}
Code works this way:
public interface ApplicationRepository extends JpaRepository<Application, Long> {
@Query("SELECT app FROM #{#entityName} AS app WHERE app.status LIKE :status")
List<Application> find(@Param("status") ApplicationStatus status);
But the same snippet with nativeQuery - doesn't:
@Query(value = "SELECT app.* FROM application AS app WHERE app.status LIKE :status", nativeQuery = true)
List<Application> findNative(@Param("status") ApplicationStatus status);
}
And I don`t have any exception, just empty list.
How can I fix this? Is it possible to use enum
with nativeQuery
?
P.S I can pass String
into method instead of ApplicationStatus
but maybe there are another option?
回答1:
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()}
回答2:
You could convert to string before passing the params.
回答3:
how about this?
public interface ApplicationRepository extends JpaRepository<Application, Long> {
List<Application> findByStatus(ApplicationStatus status);
来源:https://stackoverflow.com/questions/44460394/can-i-use-enum-parameter-into-jparepository-nativequery