2017-04-20 15 views
1

インターフェイスメソッド宣言で@Queryアノテーションを使用してSpringData Jpaを使用してクエリを作成しようとしています。@Queryを使用してクエリを実行する方法Spring JPAアノテーション

インターフェースは次のようになります。

public interface MyService { 

    @Query("select * from employee e where e.projectId = ?1") 
    public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException; 
} 

私はまた、このインタフェースを実装するクラスを持っている:

@Component 
public class ProjectServiceImpl implements ProjectService { 

} 

私はどのようにこのクエリの実行作業とどのように実装を提供する意志を確認していませんImplementsクラスのgetEmployeesWorkingOnAProjectメソッドの場合

おかげで、あなたのインターフェイスで

+0

をこのケースでは、 'Query' @必要はありません。あなたのメソッドに 'findByProjectId(String)'、または 'findByProject(Project)'に外部キーの関係があれば名前を付けるだけです。 – chrylis

答えて

4

、あなたは JpaRepository(またはその他の春のデータリポジトリ)を拡張する必要があります。 次に、任意のSpring Beanクラスのインタフェースをautowireにして、getEmployeesWorkingOnAProject()を呼び出すことができます。例えばので

public interface MyService extends JpaRepository<Employee,Long> { 

    @Query("select * from employee e where e.projectId = ?1") 
    public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException; 

} 


@Component 
public class ProjectServiceImpl implements ProjectService { 

    private final MyService service; 

    @Autowire // not necessary in spring 4.3 + 
    public ProjectServiceImpl(MyService service) { 
     this.service = service; 
    } 

    public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException { 
     return service.getEmployeesWorkingOnAProject(); 
    } 
} 

しかし、春データは、あなたのためのクエリを構築することができますので、この例では、独自のクエリを記述するための理由ではありません

春データの方法:最初

public interface MyService extends JpaRepository<Employee,Long> { 

    public List<Employee> findAllByProjectId(String projectId) throws MyException; 

} 
+0

thnx。このメソッド名が機能するように、従業員とプロジェクトの間にどのような関係を定義する必要がありますか。 –

+0

私はそれが別の質問だと思うので、あなたは新しい脅威 – sovas

+0

thxの仲間に尋ねる必要があります。あなたの助けに感謝 –

0

初のもの。あなたのインターフェースは、ある種のSpring Data Repositoryを拡張する必要があります。例えば、JpaRepositoryです。

2番目のことは、クエリアノテーションで2種類のクエリを入力できることです。 JPQLまたはネイティブSQLクエリこれは、クエリアノテーション(nativeQuery)のフラグによって制御できます。

JPQLで

、クエリは次のようになります。

@Query("select e from employee e where e.projectId = ?1") 
関連する問題