java - 当我使用spring data保存实体时,Repository返回空指针异常

标签 java spring jpa spring-data-jpa

我一直在使用 Spring Data 和 JavaConfig 文档,我已经设置了 Spring JPA 配置,但是当调用存储库中的 save 方法时,会抛出空指针异常。

这是 github 项目:https://github.com/Ibrahimhizeoui/HRessources.git 我的存储库:

@Repository
public interface EmployeeRepository extends JpaRepository<Employee,Integer> 
{
}

我的类(class):

@Entity
@Table
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String firstName;
private String lastName;
private Date created_at;
private Date updated_at;
public Employee() {}
 }
//getters & setters

使用我的存储库的类:

public class EmployeeDao {

@Autowired
private EmployeeRepository employeeRepository;

public void saveEmployee(Employee employee){
    employeeRepository.save(employee);

}}

这是我的 Jpa 配置:

@Configuration
@EnableJpaRepositories(basePackages="dao")
@EnableTransactionManagement
public class JpaConfiguration {

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
LocalContainerEntityManagerFactoryBean emfb =
new LocalContainerEntityManagerFactoryBean();
emfb.setDataSource(dataSource);
emfb.setJpaVendorAdapter(jpaVendorAdapter);
emfb.setPackagesToScan("model");
return emfb;
}

@Bean(name = "dataSource")
public DriverManagerDataSource dataSource() {
    DriverManagerDataSource driverManagerDataSource = new 
DriverManagerDataSource();
    driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");

driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/hressource");
    driverManagerDataSource.setUsername("root");
    driverManagerDataSource.setPassword("");
    return driverManagerDataSource;
}

@Bean
public JpaVendorAdapter jpaVendorAdapter() {
    HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new 
    HibernateJpaVendorAdapter();
    hibernateJpaVendorAdapter.setShowSql(true);
    hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
    return hibernateJpaVendorAdapter;
}

 @Bean
    public PersistenceExceptionTranslationPostProcessor 
  exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }

 @Bean
 public BeanPostProcessor persistenceTranslation() {
 return new PersistenceExceptionTranslationPostProcessor();
 }}

我对 Spring Data 相当陌生,所以我确实认为这是我在配置中缺少的东西。任何建议将不胜感激!

Exception in thread "main" java.lang.NullPointerException
at dao.EmployeeDao.saveEmployee(EmployeeDao.java:16)
at Main.main(Main.java:10)

这是 github 项目:https://github.com/Ibrahimhizeoui/HRessources.git我的仓库

最佳答案

如果您从 Main.java main 方法调用 saveEmployee ,那么它当然不会工作,因为您没有spring 上下文已创建,因此您的 EmployeeRepository 未 Autowiring 并且等于 null。您可以使用 Spring Boot 启动应用程序(例如):

@ComponentScan
@EntityScan("model")
@EnableJpaRepositories("dao")
public class Main {

    /**
     * Run the application using Spring Boot and an embedded servlet engine.
     *
     * @param args program arguments - ignored.
     */
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);

        EmployeeDao employeeDao = context.getBean("dao", EmployeeDao.class);

        Employee employee = new Employee();
        employee.setFirstName("ib");
        employeeDao.saveEmployee(employee);
    }
}

另外不要忘记向您的 DAO 类添加 @Component 注释:

@Component("dao")
public class EmployeeDao

关于java - 当我使用spring data保存实体时,Repository返回空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47915971/

相关文章:

java - 计算二叉搜索树的深度?

java - 自动建议组合框,可从 mysql 数据库检索值

java - QueryDsl 投影 ElementCollection

java - 如何更改另一个 Activity 中的 ListPreference 值

java - 深度优先搜索随机选择节点/顶点

java - Servlet异常: No adapter for handler just for one service

java - 延迟加载在需要时不检索

spring - Thymeleaf/Spring MVC - 你如何在链接表达式中嵌套变量/表达式?

java - 有没有办法使用 JPA 存储库方法关键字来搜索列中的术语列表?

java - 数据库唯一键、JPA 存储库和 getByUniqueKey 签名 : how does it works?