我在使用存储库的mysql的Spring Boot jpa Hibernate中收到以下错误:
创建名为“accountRepository”的bean:调用init方法失败;嵌套异常为java。lang.IllegalStateException:您在存储库中定义了查询方法,但没有定义任何查询查找策略。基础设施显然不支持查询方法!
这确实适用于只有Spring mvc应用程序而不是Spring Boot应用程序的旧版本Spring data jpa。
我能找到的唯一解决方案是有人降级到sping-data 1.6.2。我尝试了RELEASE(1.7.0的Spring Data JPA错误。M1查询查找策略异常),但它引起了其他冲突,可能是因为我使用了最近的Spring Boot,它有一个最近的Spring核心,很可能与旧版本的sping-data发生依赖冲突。
我还意识到,没有必要指定默认的queryLookupStrategy。
JPA配置通过Java配置是
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.ranchtec.repository", queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND)
@PropertySource({ "classpath:db.properties" })
public class PersistenceJPAConfig {
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jpa.generateDdl}")
boolean jpaGenerateDdl;
// Hibernate specific
@Value("${hibernate.dialect}")
String hibernateDialect;
@Value("${hibernate.show_sql}")
boolean hibernateShowSql;
@Value("${hibernate.hbm2ddl.auto}")
String hibernateHbm2ddlAuto;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
public PersistenceJPAConfig() {
}
@Autowired
org.springframework.core.env.Environment env;
// beans
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(appDataSource());
factoryBean.setPackagesToScan(new String[] { "com.ranchtec.domain" });
final JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter() {
{
setDatabasePlatform(hibernateDialect);
setShowSql(hibernateShowSql);
setGenerateDdl(jpaGenerateDdl);
setDatabase(Database.MYSQL);
}
};
factoryBean.setJpaVendorAdapter(vendorAdapter);
factoryBean.setJpaProperties(additionlProperties());
return factoryBean;
}
@Bean
public DataSource appDataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(jdbcUsername);
dataSource.setPassword(jdbcPassword);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager() {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
return new PersistenceExceptionTranslationPostProcessor();
}
final Properties additionlProperties() {
return new Properties() {
{
// use this to inject additional properties in the EntityManager
// setProperty("hibernate.hbm2ddl.auto", hibernateHbm2ddlAuto);
setProperty("hibernate.ejb.naming_strategy", org.hibernate.cfg.ImprovedNamingStrategy.class.getName());
}
};
}
存储库是通用的:
public interface AccountRepository extends CrudRepository<Account, Long> {
Account findById(Long id);
Account findByUserName(String userName);
List<Account> findAll();
}
主要部门:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>
<!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.6.Final</version>
</dependency>
您需要包括spring data commons更高版本,例如1.9.1。发布
以下策略可用于仓库基础结构来解决查询。你可以在XML配置中的命名空间通过query-lookup-strategy属性来配置策略或者在JAVA配置中通过Enable${store}Repositories声明queryLookupStrategy属性。有些策略可能对于特别的datastores并不支持。 CREATE 从查询方法名来尝试构建一个特别的数据查询。一般的方法都是从方法名称中移除已知设定
这里是我的问题:我从amazon dynamodb api中读到,for query中的条件意味着检查列表*中的匹配元素,但为什么它返回错误:*查询键条件不受支持? aws dynamodb查询--表名Music--关键条件{“艺术家”:{“AttributeValueList”:[{“S”:“Wangdong”}、{“S”:“Acme Band”}]、“ComparisonOperator”:“
我正在尝试查询我的dynamodb表以获取提要\u guid和状态\u id=1。但它返回查询键条件不受支持的错误。请查找我的表架构和查询。 以下是我更新该表的查询。
Elasticsearch模块支持所有基本查询构建,比如String,Abstract,Criteria或通过方法名获得构建查询。 声明查询 通过解析方法名来构建查询有时可能满足不了开发者的需求,或造成方法名可读性差。这时可以使用@Query注解来声明一个查询(参考使用@Query注解)
Spring Data repository使用下面的一套策略来决定最后创建的查询。可以通过配置XML中的query-loop-strategy属性或Javaconfig中Enable${store}Repositories注解的queryLookupStrategy属性来调整策略。某些特定的数据存储可能不支持所有策略。 CREATE 通过解析方法名构建查询,会删除方法名的某些前缀(eg:find
我正在从aws Dynamodb中的数据库中查询数据,并在Key条件表达式上遇到错误消息。 我在查询“支配性时间性”和“dt”。这些组成了我的复合分区键-dt对于每一行和我的排序键都是唯一的。 我正在运行的代码: