2

Spring Data JPA を使用しており、次のようなクエリを実行しようとしています。

@Query(value="select i.content from Item i where i.itemOrder = :order")
List<String> findContentByItemOrder(@Param("order")Integer itemOrder);

しかし、例外がスローされます: org.hibernate.hql.internal.ast.QuerySyntaxException:アイテムがマップされていません [select i.content from Item i where i.itemOrder = :order]

だから私はこれを実行すると:

@Query(value="select i.content from package.name.Item i where i.itemOrder = :order")
List<String> findContentByItemOrder(@Param("order")Integer itemOrder);

すべてが期待どおりに機能します。私の構成:

@Bean
public EntityManagerFactory entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();

    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setGenerateDdl(true);

    factory.setJpaVendorAdapter(vendorAdapter);
    factory.setPackagesToScan("package.name");
    factory.setDataSource(dataSource);
    factory.setJpaProperties(createProperties());
    factory.afterPropertiesSet();

    return factory.getObject();
}

private Properties createProperties(){
    Properties properties = new Properties();
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
    properties.setProperty("hibernate.show_sql", "true");
    properties.setProperty("hibernate.hbm2ddl.auto", "validate");

    return properties; 
}

私が使用している: Spring Data Jpa 1.3.1.RELEASE、Hiberante 4.2、Spring 3.2.1

問題は、クエリのすべてのクラス名にpackage.nameを入れたくないということです。マップされたクラスを自動的に見つけるために Spring Data JPA を設定する方法は?

4

0 に答える 0