Spring Boot入口类
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;
}
}
Data JPA Repository接口
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 file
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.
如果我从ShopRepository
中移除@Autowired
注释,那么它会抛出'NullPointerException'
我已经尝试在这里使用@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;
@Transactional
注解。 - soorapadmanspring-boot-starter-data-jpa
添加的hibernate-core
依赖。您添加的版本是旧版本,与 starter 中包含的版本冲突。简单的解决方案就是移除hibernate-core
依赖。 - M. Deinum