【发布时间】:2016-11-24 11:29:38
【问题描述】:
我已经使用 gradle 创建了 spring boot data jpa 应用程序,我的项目结构如下所示。
com.duregesh
--TestSpringBootDataJpaApplication.java
com.durgesh.controller
--UserController.java
com.durgesh.model
--User.java
com.durgesh.repositories
--UserJpaRepository.java
com.durgesh.services
--UserServiceImpl.java
当我在下面运行 spring boot 时,异常正在触发 说明:
com.durgesh.services.UserServiceImpl 中的字段 userJpaRepository 需要一个名为“emf”的 bean,但无法找到。
行动: 考虑在您的配置中定义一个名为“emf”的 bean。
@SpringBootApplication
public class TestSpringBootDataJpaApplication {
public static void main(String[] args) {
SpringApplication.run(TestSpringBootDataJpaApplication.class, args);
}
-------------
public interface UserJpaRepository extends JpaRepository<User, Long> {}
-------------
@Entity
@Table(name = "USER")
public class User implements Serializable{
@Id
private Long id;
@Column(unique = true)
private String uid;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
----------------
@Service
@EnableJpaRepositories(basePackages="com.construction.de.*", entityManagerFactoryRef="emf")
public class UserServiceImpl implements UserService {
@Autowired
private UserJpaRepository userJpaRepository;
@Override
public User add(final User user) {
return userJpaRepository.save(user);
}
@Override
public User findById(final Long id) {
final User user = userJpaRepository.findOne(id);
return user;
}
}
----
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value ="/",method = RequestMethod.POST)
public User add( @RequestBody final User user){
return userService.add(user);
}
@RequestMapping(value ="/{id}",method = RequestMethod.GET)
public User findById(@PathVariable("id") final Long id){
return userService.findById(id);
}
}
【问题讨论】:
-
如果直接在 UserController.java 中使用 UserJpaRepository.java 工作正常
-
@SpringBootApplication 公共类 TestSpringBootDataJpaApplication { public static void main(String[] args) { SpringApplication.run(TestSpringBootDataJpaApplication.class, args); }
-
你是怎么配置spring的! .. 似乎是 bean 配置中的问题。你有任何名为 'emf' 的 bean 可能是你的 EntityManagerFactory .. 你是如何将它连接到你的 dao
-
hmm 看起来你混合了来自不同代码示例的不同配置。第一个问题是,在您的服务层“UserServiceImpl”中,您尝试连接一个名为
emf的bean,在您的spring 配置中(尚未发布)我确信您还没有定义一个名称为emf的实体管理器。第二个问题,为什么要在服务层连接 entityManager ? Spring Data 将处理您的存储库,因此您只需像一开始那样自动装配存储库类 -
只需删除
@EnableJpaRepositoriesspring boot 会自动执行此操作。您现在已经自己配置了它,并且使用了错误的 entitymanagerfactory 名称对其进行了配置。但是使用 Spring Boot 时不需要整个注解。
标签: spring spring-mvc spring-boot spring-data spring-boot-gradle-plugin