Ahoj,
mam nekolik webu ve Springu, na JPA pouzivam Hibernate. Potrebuji vyhledavat entity podle uzivatelem zadaneho id. Problem je, kdyz dane id neni v databazi, pak to hodi NullPointerException.
Resim to nasledovane:
People p;
try {
p = peopleManager.findById(Integer.parseInt(id));
if (p != null) {
model.addAttribute("message", "user exist, do any action");
} else {
model.addAttribute("message", "user NOT exist");
}
} catch (NullPointerException e) {
model.addAttribute("message", "user NOT exist");
}
Zda se mi to jako velka prasarna... Jak se to ma resit spravne?
Vsechen kod:
package com.example.test.entity;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
public class People {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name="name")
private String name;
@Column(name="age")
private int age;
}
/* ---------------------------------------------------- */
package com.example.test.dao;
import java.util.List;
import com.example.test.entity.People;
public interface PeopleDao {
public void save(People people);
public void delete(People people);
public void update(People people);
public List<People> findAll();
public People findById(int id);
}
/* ---------------------------------------------------- */
package com.example.test.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.example.test.entity.People;
@Repository
public class PeopleDaoImpl implements PeopleDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public void save(People people) {
this.sessionFactory.getCurrentSession().save(people);
}
@Override
public void delete(People people) {
this.sessionFactory.getCurrentSession().delete(people);
}
@Override
public void update(People people) {
this.sessionFactory.getCurrentSession().update(people);
}
@Override
public List<People> findAll() {
return this.sessionFactory.getCurrentSession().createQuery("from People ORDER BY age").list();
}
@Override
public People findById(int id) {
return (People) this.sessionFactory.getCurrentSession().get(People.class, id);
}
}
/* ---------------------------------------------------- */
package com.example.test.service;
import java.util.List;
import com.example.test.entity.People;
public interface PeopleManager {
public void save(People people);
public void delete(People people);
public void update(People people);
public List<People> findAll();
public People findById(int id);
}
/* ---------------------------------------------------- */
package com.example.test.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.test.dao.PeopleDao;
import com.example.test.entity.People;
@Service
@Transactional
public class PeopleManagerImpl implements PeopleManager {
@Autowired
private PeopleDao peopleDao;
@Override
public void save(People people) {
peopleDao.save(people);
}
@Override
public void delete(People people) {
peopleDao.delete(people);
}
@Override
public void update(People people) {
peopleDao.update(people);
}
@Override
public List<People> findAll() {
return peopleDao.findAll();
}
@Override
public People findById(int id) {
return peopleDao.findById(id);
}
/* ---------------------------------------------------- */
package com.example.test.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.example.test.entity.People;
import com.example.test.service.PeopleManager;
@Controller
public class PeopleController {
@Autowired
private PeopleManager peopleManager;
@RequestMapping(value = "/people/{id}", method = RequestMethod.GET)
public String home(Model model, @PathVariable("id") String id) {
People p;
try {
p = peopleManager.findById(Integer.parseInt(id));
if (p != null) {
model.addAttribute("message", "user exist, do any action");
} else {
model.addAttribute("message", "user NOT exist");
}
} catch (NullPointerException e) {
model.addAttribute("message", "user NOT exist");
}
return "people";
}
}
/* ---------------------------------------------------- */