1

如何扩展 Spring Data JPA @Query 方法注释?

从这篇文章http://www.javacodegeeks.com/2012/08/hibernate-native-sql-features-into-your.html我学习了如何扩展 Spring 数据 JPA 功能,不幸的是文章讲述了 ElementType.TYPE 注释,但我需要了解 ElementType.METHOD 注释以及这个带注释的方法将如何由 spring data jpa 注册和处理。

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

}

然后我遇到了下一个障碍,我发现 SD JPA 扫描每个存储库接口的所有方法并使用 QueryLookupStrategy 对它们进行 QueryLookup,我不知道如何从 SD - JPA QueryLookup 中排除使用 @Dynaque 注释的方法,以便我可以实现我自己对该方法的查询逻辑。

4

0 回答 0