春天新手..
尝试使用@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;
}
我的问题是我缺少的设置信息是什么?
答案 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 "()"