Проблема с пользовательским запросом Spring DataJPA:

У меня есть установка с JPA (hibernate + postgresql) и MongoDB:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.0.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.1.0.RELEASE</version>
    </dependency>

Мой интерфейс репозитория:

@Repository
public interface JpaModelRepository extends JpaRepository<ModelEntity, Integer> {
    public ModelEntity findByName(String modelNameSample);
}

Моя сущность:

@Entity
@Table (name = "model")
public class ModelEntity implements GenericId<Integer>, Serializable {

    ....
    @Column (name = "name_tx")
    private String name;

Реализация интерфейса репозитория автоматически генерируется SpringData. Если я удалю findByName, в моем проекте все будет работать нормально. Если я оставлю это, у меня будет это в журнале ошибок tomcat:

Caused by: java.lang.NoSuchMethodError: org.springframework.data.repository.query.parser.Part.getProperty()Lorg/springframework/data/repository/query/parser/Property;
    at org.springframework.data.jpa.repository.query.JpaQueryCreator.toPredicate(JpaQueryCreator.java:163)
    at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:95)
    at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:49)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:109)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:73)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.<init>(PartTreeJpaQuery.java:102)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:59)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:93)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:164)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:71)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:269)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:142)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:114)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:38)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
    ... 85 more

Пытался использовать эту документацию, но по какой-то причине не удалось: Документ Spring

Надеюсь, что одному из вас удалось создать собственный запрос (например, findBySomeProperty(...))...

Спасибо


person Mircea Stanciu    schedule 21.09.2012    source источник


Ответы (4)


API-интерфейсы данных Spring изменились между выпусками 1.0 и 1.1, поэтому эта ошибка. Используйте одну и ту же версию для обеих ваших зависимостей, и она должна работать.

person Abhinav Sarkar    schedule 21.09.2012
comment
Привет, Абхинав. Ты прав. Проблема в том, что mongo Api версии 1.0.4 (последняя версия, которую я нашел в mvnrepository .com/artifact/org.springframework.data/), а API jpa — это версия 1.1.2 (mvnrepository.com/artifact/org.springframework.data/) - person Mircea Stanciu; 22.09.2012

у меня была такая же проблема

org.springframework.data.repository.query.parser.PartTree.isCountProjection()Ljava/lang/Boolean;

Но я решил это, используя правильную комбинацию банок, например

spring-data-jpa-1.2.0.RELEASE.jar <BR>
spring-data-commons-1.6.3.RELEASE.jar <BR>
spring-data-commons-core-1.4.1.RELEASE.jar<BR>
hibernate-entitymanager-4.1.12.final.jar<BR>
hibernate-jpa-2.1-api-1.0.0.final.jar<BR>
hibernate-validator-4.2.0.final.jar<BR>
hibernate-commons-annotations-4.0.0.CR2.jar<BR>

и с использованием версии банок Spring core 3.2.5. Проблема была решена.

Я также использовал правильный диалект, то есть правильный драйвер для подключения к базе данных.

person amit    schedule 29.01.2015

Я нашел ответ:

    <spring.version>3.1.2.RELEASE</spring.version>
    <spring-data.jpa.version>1.2.0.BUILD-SNAPSHOT</spring-data.jpa.version>
    <spring-data.mongodb.version>1.1.0.BUILD-SNAPSHOT</spring-data.mongodb.version>

https://github.com/SpringSource/spring-data-multistore-test

Я сделал несколько тестов maven, объединив версию в этом репозитории git.

person Mircea Stanciu    schedule 21.09.2012

У меня возникла та же проблема при попытке использовать Spring Data JPA + Hibernate + Spring Framework 4.0. Проблема в том, что проект Spring Data не отстает от той же скорости, что и проект Spring Framework.

Я решаю проблему, используя правильную комбинацию версий JAR и исключая любой другой проект Spring, чтобы эти зависимые JAR можно было загрузить правильно и автоматически на основе файла pom.xml "Spring Data". Проверьте здесь все зависимости Spring Data: http://search.maven.org/#artifactdetails%7Corg.springframework.data%7Cspring-data-jpa%7C1.6.0.RELEASE%7Cjar

Я изменил свой файл maven pom.xml на:

    <properties>

    <!-- Generic properties -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <!-- Spring -->
    <spring-framework.version>3.2.9.RELEASE</spring-framework.version>
    <spring-data.version>1.6.0.RELEASE</spring-data.version>

    <!-- Hibernate / JPA -->
    <hibernate.version>3.6.10.Final</hibernate.version>

    <!-- Test -->
    <junit.version>4.11</junit.version>

    </properties>

    <dependencies>

    <!-- Spring framework -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${spring-data.version}</version>
    </dependency>

    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>${hibernate-jpa.version}</version>
    </dependency>

            ....
</dependencies>
person Hugo Sequeira    schedule 23.05.2014