Spring Data JPA @Queryメソッドアノテーションを拡張する方法は?
この記事からhttp://www.javacodegeeks.com/2012/08/hibernate-native-sql-features-into-your.htmlSpringデータのJPA機能を拡張する方法を学びましたが、残念ながらこの記事ではElementType.TYPEアノテーションについて説明しています。しかし、ElementType.METHODアノテーションと、このアノテーション付きメソッドがSpringDatajpaによって登録および処理される方法を理解する必要があります。
11052012 1547-メソッドアノテーションの処理方法についてさらに調査しました。カスタムアノテーションプロセッサで元のメソッド呼び出しをインターセプトするには、AOPを使用する必要があることがわかりました。
これは私がしました
@NoRepositoryBean
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Dynaque {
String value() default "";
}
@NoRepositoryBean
@Aspect
@Component("dynaqueAopListener")
public class DynaqueAopListener {
@Pointcut("@annotation(my.repo.engine.package.Dynaque)")
public void dynaqueMethods() {
}
@Around("dynaqueMethods()")
public Object profile(ProceedingJoinPoint pjp) throws Throwable {
Method m = ((MethodSignature) pjp.getSignature()).getMethod();
Dynaque d = null;
if (m != null) {
d = m.getAnnotation(Dynaque.class);
}
Object output = pjp.proceed();
//my custom query logic here
return output;
}
}
次に、次の障害が発生しました。SDJPAがすべてのリポジトリインターフェイスのすべてのメソッドをスキャンし、QueryLookupStrategyを使用してQueryLookupを実行することを発見しました。@Dynaqueアノテーションを使用するメソッドをSDから除外する方法がわかりません-JPAQueryLookupを実装できるようにそのメソッドに対する私自身のクエリロジック。