querydsl默认自定义方法无法加载

时间:2017-07-26 02:34:40

标签: spring mongodb querydsl

我在customize方法中添加了一些绑定,参考下面的代码snap。现在有一个奇怪的问题,当重新启动程序时,有时会加载自定义方法,因此可以成功调用该方法,但有时无法加载,这会导致错误的查询结果。我调试了注入AdminRepository的资源。卸载自定义方法时,spring的JdkDynamicTarget类没有缓存的方法:

public interface AdminRepository extends CrudRepository<MonthGprs, String>,
    QueryDslPredicateExecutor<MonthGprs>, QuerydslBinderCustomizer<QMonthGprs> {
Logger log = LoggerFactory.getLogger (AdminRepository.class);
@Override
default public void customize(QuerydslBindings bindings, QMonthGprs root) {

    log.debug ("AdminRepository");

    bindings.bind (root.appLeftGprs).all (((path, value) -> {
        Iterator it = value.iterator ( );
        return path.goe ((Float) it.next ( )).and (path.loe ((Float) it.next ( )));
    }));

    bindings.bind (root.wifiLeftGprs).all (((path, value) -> {
        Iterator it = value.iterator ( );
        return path.between ((Float) it.next ( ), (Float) it.next ( ));
    }));

    bindings.bind (root.simInfo.createdDate).all (((path, value) -> {
        Iterator it = value.iterator ( );
        return path.after ((ZonedDateTime) it.next ( )).and (path.before ((ZonedDateTime) it
                .next ( )));
    }));

    bindings.bind (String.class)
            .first ((StringPath path, String value) -> path.containsIgnoreCase (value));
}

} 顺便说一句,我使用com.querydsl:querydsl-mongodb:jar:4.1.4,org.springframework.boot:spring-boot-devtools:jar:1.4.1.RELEASE, org.springframework:弹簧上下文支持:罐:4.3.3.RELEASE

1 个答案:

答案 0 :(得分:1)

我找到了为一个域模型定义了两个存储库的原因,但是在

org.springframework.data.repository.support.Repositories

private final Map<Class<?>, String> repositoryBeanNames;

此映射维护键值对,其中使用类作为键,存储库名称作为值。如果应用程序上下文具有同一域模型的多个存储库,则仅加载一个存储库类。因此,如果加载了查询dsl存储库,则会调用customize方法,或者加载其他存储库。