我一直在使用 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/