web-dev-qa-db-ja.com

JpaRepository nativeQueryに列挙型パラメーターを使用できますか?

エンティティは次のようになります。

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

コードは次のように機能します。

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);

しかし、nativeQueryと同じスニペットは-しません:

@Query(value = "SELECT app.* FROM application AS app WHERE app.status LIKE :status", nativeQuery = true)
List<Application> findNative(@Param("status") ApplicationStatus status);
}

そして、私には例外はなく、ただリストが空です。

どうすればこれを修正できますか? enumnativeQueryと一緒に使用することは可能ですか?

P.S Stringの代わりにApplicationStatusをメソッドに渡すことができますが、別のオプションがあるかもしれません。

19

パラメータを渡す前に文字列に変換できます。

1
danidacar

次の 同様の質問 同様の要件と 回答の1つ ポイント Spring Expression Language(SpEL) 次を使用できます:

_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);
}
_

上記の重要な部分はapp.status=:#{#status.name()}です

1
Aivaras

これはどう?

public interface ApplicationRepository extends JpaRepository<Application, Long> {
List<Application> findByStatus(ApplicationStatus status);
0
David M.