Запрещена аннотация запросов для этого местоположения - PullRequest
0 голосов
/ 28 мая 2018

Новое в Spring ..

Попытка использовать аннотацию @Query, но при этом появляется сообщение: аннотация @Query запрещена для этого местоположения

Должен быть какая-то настройка или конфигурация Iя пропускаю вот что у меня есть:

pom.xml

<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>

Вынужден использовать 1.5.2.RELEASE, так как это текущий стандарт работодателя. Смотря в зависимости Maven, я вижу: hibernate-core-5.0.12.Final hibernate-jpa-2.1-api-1.0.0.Final.jar spring-data-jpa-1.11.1.RELEASE.jar + многие другие

в некоторых примерахЯ видел, как легко добавить аннотацию @Query, однако она не работает.в настоящее время у меня есть только сущность, репо, контроллер и основной.

Я пробовал @Repository, но, похоже, это не имеет значения

вот репо

public interface DeptRepo extends JpaRepository<Dept, Long> {

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

свойства приложения

spring.jpa.show_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/to2b
spring.datasource.username=scott
spring.datasource.password=tiger

Мой вопрос: что за настройки мне не хватает?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Когда вы получаете ошибку компиляции, такую ​​как вы упомянули, а именно:

Аннотация @Query запрещена для этого местоположения

Тогда это означает, что выВы используете аннотацию, для которой она не предназначена.Если аннотация позволяет вам только поместить его поверх метода, вы получите это исключение, когда поместите его поверх класса или поверх свойства.

В этом случае @Query аннотация предназначена только для целевых методов и других аннотаций (так что вы можете использовать ее для формирования пользовательских аннотаций), как видно из документации API :

@Target(value={METHOD,ANNOTATION_TYPE})

Вы должны определить свои запросы как методы , в настоящее время вы сопоставили его с полем.Чтобы решить ее, напишите метод:

@Query(value = "select d from dept d where name = 'ACCOUNTING'")
List<Dept> findByAccounting(); // Using "()"
0 голосов
/ 28 мая 2018

сопоставлен ли ваш пакет репозитория с классом конфигурации?

@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;
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...