2012-09-21 24 views
0

我有JPA(休眠+ PostgreSQL系统)和MongoDB的设置:春DataJPA自定义查询问题:

<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 Doc

希望是你们的一个成功地创建一个自定义查询(如findBySomeProperty(...))...

谢谢

回答

0

我找到了答案:

<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

我做了一些行家测试上的Git仓库

1

春季数据API的变化bewteen 1.0和1.1版本中,这就是为什么这个错误。对你的两个依赖使用相同的版本,它应该工作。

+0

嗨阿比纳夫。你是对的。问题是mongo Api是1.0.4版本(我在http://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb上找到了最新版本),jpa api是1.1.2 Release(http:// mvnrepository.com/artifact/org.springframework.data/spring-data-jpa) –

0

我试图使用Spring数据JPA + Hibernate的时候了同样的问题相结合的版本+ Spring Framework 4.0。问题在于Spring Data项目不能像Spring Framework项目那样保持同样的速度。

我使用正确的JAR版本组合排除了任何其他Spring项目,从而可以根据“Spring Data”pom.xml文件自动下载这些依赖的JAR。检查这里所有的春数据依赖关系: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> 
0

我有

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> 

and using spring core 3.2.5 versio n个罐子。问题解决了。

我还使用了正确的方言,即连接到数据库的正确驱动程序。