Chr*_*her 4 java mysql jpa spring-data
有没有办法让CrudRepository接口对具有多行的表进行排序并简单地返回第一行,例如按时间戳排序以仅返回最新的行?
public interface ImportReceiptRepository extends CrudRepository<ImportReceipt, Long>
{
ImportReceipt getOneByImportTypeOrderByTimestampDesc(String importType);
ImportReceipt findOneByImportTypeOrderByTimestampDesc(String importType);
}
Run Code Online (Sandbox Code Playgroud)
findOneBy ...和getOneBy ... throw:
org.springframework.dao.IncorrectResultSizeDataAccessException: result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:395)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:216)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.LockModeRepositoryPostProcessor$LockModePopulatingMethodIntercceptor.invoke(LockModeRepositoryPostProcessor.java:105)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy109.findOneByImportTypeOrderByTimestampDesc(Unknown Source)
at edu.ucdavis.dss.dw.services.DefaultImportReceiptService.getLatestOneByImportType(DefaultImportReceiptService.java:26)
...
Run Code Online (Sandbox Code Playgroud)
或者,换句话说,CrudRepository相当于:
SELECT * FROM ImportReceipts ORDER BY timestamp DESC LIMIT 0,1;
Run Code Online (Sandbox Code Playgroud)
Chr*_*her 10
Bludream的答案来自setMaxResults的Spring-Data-JPA注释?......有答案.
语法是"findFirst"或"findTop10",尽管它仍然返回一个列表.
List<ImportReceipt> findFirstByImportTypeOrderByTimestampDesc(String importType);
Run Code Online (Sandbox Code Playgroud)
我想List总是大小()0或1.
| 归档时间: |
|
| 查看次数: |
10054 次 |
| 最近记录: |