Cześć, jestem początkujący użytkownikiem springa i hibernate'a i proszę o poradę, gdyż nie mogę znaleźć rozwiązania.
Najpierw przedstawię kod, a potem pytanie.
HibernateConfig.java
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.test.config" })
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfig {
@Autowired
private Environment environment;
@Bean
public SessionFactory sessionFactory() {
LocalSessionFactoryBuilder builder =
new LocalSessionFactoryBuilder(dataSource());
builder.scanPackages("com.test.business")
.addProperties(hibernateProperties());
return builder.buildSessionFactory();
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
return properties;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
return dataSource;
}
@Bean
public HibernateTransactionManager txManager() {
return new HibernateTransactionManager(sessionFactory());
}
@Bean
public HibernateTemplate hibernateTemplate() {
return new HibernateTemplate(sessionFactory());
}
}
Person.java
@Entity
@Table(name = "person")
public class Person {
@Id
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
PersonDao.java
@Repository
public class PersonDao {
@Autowired
private HibernateTemplate hibernateTemplate;
public void savePerson(){
Person person = new Person();
person.setId(2);
person.setName("NazwaTest");
hibernateTemplate.save(person);
}
}
PersonService.java
@Service
@Transactional
public class PersonService {
private PersonDao personDao = new PersonDao();
public void addNewPerson(){
personDao.savePerson();
}
}
PersonController.java
@GetMapping(value="/")
@ResponseBody
public String printWelcome() {
PersonService personService = new PersonService();
personService.addNewPerson();
return "home";
}
Kod generalnie bardzo prosty, bo na razie uczę się właśnie schematów i działania.
Problem w tym, że gdy uruchomię aplikację i wejdę na stronę wyrzuca mi błąd java.lang.NullPointerException: null
Generalnie dotoczy to pliku PersonDao.java oraz linii hibernateTemplate.save(person);
Wyczytałem, że to chyba błąd z niewłaściwie zadeklarowanymi beanami i autowire, ale nie mogę sobie z tym poradzić. Czy ktoś mógłby dać jakąś wskazówkę?