此位置不允许使用查询注释

时间:2018-05-28 11:34:56

标签: hibernate spring-boot spring-data-jpa

春天新手..

尝试使用@Query注释,但收到以下消息: 此位置不允许使用注释@Query

我需要的一些设置或配置是我所拥有的:

的pom.xml

Supply/Supplysite/Supply site/ Supplier/ Suppliers

被迫使用1.5.2.RELEASE,因为它是雇主的现行标准 看看Maven依赖,我看到: hibernate-core-5.0.12.Final 冬眠,JPA-2.1-API 1.0.0.Final.jar 弹簧数据JPA-1.11.1.RELEASE.jar +许多其他人

在我看到的一些示例中,添加@Query注释似乎很容易,但它似乎不起作用。目前我只有一个实体,回购,控制器和一个主。

我已经尝试了@Repository,但它似乎没有什么区别

这里是回购

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.2.RELEASE</version>
 <relativePath/>
</parent>
… to dependency:
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>      
</dependency>

应用程序属性

public interface DeptRepo extends JpaRepository<Dept, Long> {

@Query(value = "select d from dept d where name = 'ACCOUNTING'")
List<Dept> findByAccounting;
}

我的问题是我缺少的设置信息是什么?

3 个答案:

答案 0 :(得分:1)

代替

public interface DeptRepo extends JpaRepository<Dept, Long> {
   @Query(value = "select d from dept d where name = 'ACCOUNTING'")
   List<Dept> findByAccounting;
}

使用

public interface DeptRepo extends JpaRepository<Dept, Long> {
  @Query(value = "select d from dept d where name = 'ACCOUNTING'")
  List<Dept> findByAccounting(); 
}

答案 1 :(得分:0)

是您的存储库包映射到配置类吗?

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {
        "br.com.example.repository"}, entityManagerFactoryRef = "exampleEntityManager", transactionManagerRef = "exampleTransactionManager")
public class ExampleDataSourceConfig {

    @Primary
    @Bean(name = "exampleEntityManager")
    public LocalContainerEntityManagerFactoryBean exampleEntityManager() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(exampleDataSource());
        em.setPackagesToScan(new String[] { 
                "br.com.example.domain"});

        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        final HashMap<String, Object> properties = new HashMap<String, Object>();
        properties.put("hibernate.hbm2ddl.auto", "validate");
        properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");      
        em.setPersistenceUnitName("examplePU");
        em.setJpaPropertyMap(properties);
        return em;
    }

    public DataSource exampleDataSource() {
        JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
        DataSource dataSource = dataSourceLookup.getDataSource("jdbc/examplejndi");
        return dataSource;

    }

    @Primary
    @Bean(name = "exampleTransactionManager")
    public PlatformTransactionManager exampleTransactionManager() {
        final JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(exampleEntityManager().getObject());
        return transactionManager;
    }   
}

答案 2 :(得分:0)

当您收到编辑错误时,即:

  

此地点不允许使用注释@Query

然后,这意味着您在其不适合的某个地方使用了注释。如果注释只允许您将其置于某个方法的顶部,那么当您将其放在类的顶部或属性顶部时,您将获得此异常。

在这种情况下,@Query注释仅定位方法和其他注释(以便您可以使用它来形成自定义注释),如API documentation中所示:

@Target(value={METHOD,ANNOTATION_TYPE})

您应该将查询定义为方法,目前您已将其映射到字段。要解决它,请编写一个方法:

@Query(value = "select d from dept d where name = 'ACCOUNTING'")
List<Dept> findByAccounting(); // Using "()"