Spring Data Cassandra не может зарегистрировать собственный репозиторий

Я использую spring-data-cassandra 1.1.1.RELEASE и пытаюсь создать собственный репозиторий. У меня есть репозиторий, например

@Repository
public interface EntityRepository extends TypedIdCassandraRepository<Entity, EntityKey>, EntityRepositoryCustom {    
}

и я получил EntityRepositoryCustom:

public interface EntityRepositoryCustom{
    TelemetryPoint getEntityByDeviceAndDate(Device device, DateTime dateTime);
}

и его реализация:

public class EntityRepositoryImpl implements EntityRepositoryCustom {
    @Autowired
    CassandraOperations template;

    @Override
    public Entity getEntityByDeviceAndDate(Device device, DateTime dateTime) {
        Select select = QueryBuilder.select().from("entity");

        Clause deviceClause = QueryBuilder.eq("device_id", device.getDeviceId());
        Clause dateClause = QueryBuilder.eq("datetime", dateTime);
        select.where(deviceClause).and(dateClause);

        Entity one = template.selectOne(select, Entity.class);
        return one;
    }
}

при запуске весеннего загрузочного приложения кажется, что оно не может обнаружить собственный класс реализации репозитория. Я заканчиваю с таким исключением:

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy118]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy118
    at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:212)
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)
    at org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor.postProcessAfterInitialization(AbstractAdvisingBeanPostProcessor.java:91)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1713)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:113)
    ... 37 more

Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy118
    at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)
    at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)
    at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
    at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
    at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
    at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)
    at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)
    ... 42 more

Обратите внимание, что я на JDK1.8_25. Аналогичный пользовательский репозиторий на основе JPA не имеет проблем.


person samyem    schedule 09.12.2014    source источник


Ответы (2)


В соответствии с этим выпуском Spring-boot GitHub любой пользовательский репозиторий, который расширяет возможности Spring Data Repository не нужна аннотация @Repository.

Если это не поможет, мне помогло добавление spring.dao.exceptiontranslation.enabled=false к моему application.properties.

person alexvetter    schedule 29.04.2015
comment
Вы и Майкл ako Tecourt попали в самую точку и помогли мне решить аналогичную проблему. Хороший. - person John Lockwood; 04.07.2015

Вы пытались удалить аннотацию @Repository в интерфейсе репозитория? На самом деле, вместо этого вам следует добавить некий вариант @Component поверх пользовательской реализации репозитория (EntityRepositoryImpl).

person Michael Técourt    schedule 27.04.2015