弹簧靴入门级
package com.test; @SpringBootApplication(exclude={ DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}) public class AssetManagementDigital2Application { public static void main(String[] args) { SpringApplication.run(AssetManagementDigital2Application.class, args); } }
控制器类
package com.test.assetmanagementdigital.controller; @RestController public class ShopController { @Autowired private ShopServiceImpl shopServiceImpl; @RequestMapping(value="/shops",method=RequestMethod.POST) public void shopDetails(Shop shop){ shopServiceImpl.addShopDetails(shop); } }
实体
package com.test.assetmanagementdigital.model; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name="ShopDetails") public class Shop { private String shopName; private Address address; public String getShopName() { return shopName; } public void setShopName(String shopName) { this.shopName = shopName; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
数据jpa存储库接口
package com.test.assetmanagementdigital.repository; @Repository public interface ShopRepository extends CrudRepository<Shop,Long>{ }
服务等级
package com.test.assetmanagementdigital.service; @Service public class ShopServiceImpl { @Autowired private ShopRepository shopRepository; public void addShopDetails(Shop shop) { shopRepository.save(shop); } }
gradle文件
buildscript { ext { springBootVersion = '2.0.0.BUILD-SNAPSHOT' } repositories { mavenCentral() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse-wtp' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' apply plugin: 'war' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } } configurations { providedRuntime } dependencies { compile('org.springframework.boot:spring-boot-starter-data-jpa') compile('org.springframework.boot:spring-boot-starter-web') compile("com.h2database:h2") compile group: 'org.hibernate', name: 'hibernate-core', version: '4.2.2.Final' providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') testCompile('org.springframework.boot:spring-boot-starter-test') }
我收到以下错误
Description: Field shopRepository in com.test.assetmanagementdigital.service.ShopServiceImpl required a bean of type 'com.test.assetmanagementdigital.repository.ShopRepository' that could not be found. Action: Consider defining a bean of type 'com.test.assetmanagementdigital.repository.ShopRepository' in your configuration.
如果我@Autowired从中删除注释,ShopRepository它将抛出`NullPointerException
@Autowired
ShopRepository
我在@EnableJpaRepositories("com.test.assetmanagementdigital.repository")这里尝试过
@EnableJpaRepositories("com.test.assetmanagementdigital.repository")
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'shopController': Unsatisfied dependency expressed through field 'shopServiceImpl'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'shopServiceImpl': Unsatisfied dependency expressed through field 'shopRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shopRepository': Post-processing of merged bean definition failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;
您的Spring配置不正确。
在spring-boot-starter-data-jpa已经提供了hibernate-core依赖。当您使用特定版本声明它时:
spring-boot-starter-data-jpa
hibernate-core
compile group: 'org.hibernate', name: 'hibernate-core', version: '4.2.2.Final'
您不必再次声明它,因为您指定的版本可能不同,并且与启动程序提供的版本不兼容。 并且根据您的错误,似乎是这种情况,因为javax.persistence.PersistenceContext.synchronization()在运行时找不到该方法。
javax.persistence.PersistenceContext.synchronization()
合并bean定义的后处理失败;嵌套的异常是 java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;
java.lang.NoSuchMethodError
javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType
只需删除hibernate-core依赖项,它就可以工作。