Spring 数据 JPA findFirst、findTop 不起作用
Spring data JPA findFirst,findTop doesnt work
根据 Spring Data JPA 文档的 section 3.4.5,可以使用关键字 first
和 top
来限制查询方法的结果。
我的代码是这样写的:
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();
}
根据 Spring Data JPA 文档的 section 3.4.5,可以使用关键字 first
和 top
来限制查询方法的结果。
我的代码是这样写的:
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();
}