【问题标题】:Spring boot JPA null pointer exceptionSpring Boot JPA 空指针异常
【发布时间】:2018-12-31 09:18:14
【问题描述】:

我正在使用 Spring Boot、JPA 和 H2 开发 JavaFx 应用程序。当我尝试将新用户添加到数据库中时,我有一个用户实体,它在按钮的单击操作中在控制器中抛出 NPE。正如所见,我只使用自动连线表示法。我研究过 但调查结果并没有帮助。请问有什么帮助吗?

package com.core;

@SpringBootApplication
@Import(SharedSpringConfiguration.class)
public class Runner extends Application {

   private ConfigurableApplicationContext context;

   public static void main(String[] args) {
     launch(args);        
   }

   @Override
   public void init() {
    context = SpringApplication.run(Runner.class);
   }
}
package com.dao;

@Entity
@Table(name = "user")
public class User {

    @Id
    @Column(name = "id", updatable = false, nullable = false)
    private long ID;
    @Column(nullable = false)
    private String userName;
    @Column(nullable = false)
    private String userPass;

    public User() {
    }

    public User(long ID, String userName, String userPass) {
        this.ID = ID;
        this.userName = userName;
        this.userPass = userPass;
    }
}
package com.service;

@Service
public class UserService {

   @Autowired
   private UserRepository userRepository;

   public UserService() {
   }

   public void saveUser(User user) {
     userRepository.save(user);
   }
}
package com.repository;
public interface UserRepository extends CrudRepository<User, Long> {}
package com.controller

@Controller
public class MethodController implements Initializable {

  @Autowired
  private UserService userService;

  @FXML
  void methodSave(MouseEvent event) {
    userService.saveUser(new User(11, "TestUser", "noPass")); //Throws NPE. Indicates that userService is null. But I autowire the userService.
  }
}

【问题讨论】:

  • 在您的 UserService 课程中,您尝试自动连接 UserRepository。 UserRepository 未设置为弹簧组件。尝试将@Repository 添加到您的UserRepository 课程中。
  • @gonzo,我已经试过了。它没有帮助
  • 您尝试了哪个@Repository 标签?如果没有 spring 扫描,您将无法自动连接 UserRepository。
  • @gonzo, org.springframework.stereotype.Repository;
  • @gonzo 不需要 @Repository 注释。它继承自CrudRepository

标签: java spring-boot spring-data-jpa h2


【解决方案1】:

我不知道SharedSpringConfiguration 中有什么,但您可能需要在您的一个配置类中使用@EnableJpaRepositories。 CrudRepo 上的@Repository 应该是不必要的。

【讨论】:

  • 感谢您提出。我的错我在 SharedConfig 中犯了一个实现错误......现在的问题是使用 UserService service = Runner.context.getBean(UserService.class); 的方法是什么在我的控制器中。我的意思是如何定义它?就像在 Runner 中将上下文设为公共静态并从任何控制器访问它,或者应该以什么方式完成?
  • 探测后我们可以通过ApplicationContextProvider完成
【解决方案2】:

将您的 SpringBootApplication 包从 com.core 更改为 com

因为 SpringBootApplication 默认只会扫描那个包和子包。

其他

在SpringBootApplication中添加@ComponentScan注解并扫描包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 2012-09-30
    • 2021-06-15
    • 2019-02-03
    • 2021-08-31
    • 2014-06-11
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多