Spring 数据 JPA findFirst、findTop 不起作用

Spring data JPA findFirst,findTop doesnt work

根据 Spring Data JPA 文档的 section 3.4.5,可以使用关键字 firsttop 来限制查询方法的结果。

我的代码是这样写的:

SysPrefixName findFirstByTableName(String tableName);

但是,当我 运行 代码时出现此错误:

result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements

任何解决此问题的帮助将不胜感激。

如果您没有指定数字(例如 findFirst10ByTableName),则结果大小应为 1。但是由于您的查询 return 编辑了多个结果,因此您会收到错误消息,因为您的 return 对象可能不是可以从 return 结果集映射的 Collection/List 对象。

SpringData JPA 1.7 中引入了对这些关键字的支持。有关详细信息,请参阅 this ticket

如果你是 spring 内置数据源,添加 属性 :

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.SQLServer2012方言

如果您使用的是自定义数据源:

您必须在数据源 bean 中添加 属性 作为属性映射:

@Bean
public LocalContainerEntityManagerFactoryBean    sqlServerEntityManagerFactory() {
HashMap<String, String> properties = new HashMap<>();

properties.put("hibernate.dialect", 
"org.hibernate.dialect.SQLServer2012Dialect");

LocalContainerEntityManagerFactoryBean factoryBean = new 
LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(sqlServerDataSource());
factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
factoryBean.setJpaPropertyMap(properties);
return factoryBean;
}

这个对我有用:

public interface CashierRepository extends CrudRepository<Cashier, Integer>{
    List<Cashier> findAllByOrderByCashiergrouping();    
    Cashier findFirstBy();

}