2012-01-12 37 views
1

我正在使用Spring Data JPA 1.0.1。我定义了一个JPA存储库。我正在编写一个使用嵌入式数据库实现的集成测试。当我的服务类呼吁我的仓库 我得到下面的异常在spring数据jpa中实现JpaRepository接口的存储库能否返回排序集?

result returns more than one elements 
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:298) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:102) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:368) 
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58) 
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    at $Proxy48.findMyEntities(Unknown Source) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 

这里是我的仓库实现

public interface MyRepository extends JpaRepository<MyEntity, Long> { 
    @Transactional(readOnly = true) 
    @Query("select e from MyEntity e where e.state= :state") 
    public SortedSet<MyEntity> findMyEntities(@Param("state") EntityState state); 
} 
+0

是你的sql返回多个元素吗? – dimitrisli 2012-01-12 21:02:15

+0

是的。我改变了接口方法findMyEntities返回一个列表并解决了这个问题。为了确保排序结果,我指定了一个Sort参数。 – predhme 2012-01-12 22:18:38

回答

2

我改变了

@Transactional(readOnly = true) 
@Query("select e from MyEntity e where e.state= :state") 
public SortedSet<MyEntity> findMyEntities(@Param("state") EntityState state); 

@Transactional(readOnly = true) 
@Query("select e from MyEntity e where e.state= :state") 
public List<MyEntity> findMyEntities(@Param("state") EntityState state); 

一切正常。然后我添加了一个排序参数,以确保正确的排序。

相关问题