Request processing failed; nested exception is org.hibernate.LazyInitializationException: could not initialize proxy [bank.database.persistence.model.Depositor#23] - no Session
Контроллер
package bank.database.controller; import bank.database.persistence.model.Depositor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import bank.database.service.ServiceBankDatabase; import javax.servlet.http.HttpServletRequest; import java.util.List; @Controller public class ControllerBankDatabase { public static final String ROOT_PATH = "/BankDatabase"; private static final String ROOT_PATH_1= "/newDepositor"; private static final String ROOT_PATH_2 = "/addDepositor"; private static final String ROOT_PATH_3 = "/showAllDepositors"; private static final String ROOT_PATH_4 = "/findById"; private static final String ROOT_PATH_5 = "/findClientById"; private static final String ROOT_PATH_6 = "/findBySername"; private static final String ROOT_PATH_7 = "/findClientBySername"; private static final String ROOT_PATH_8 = "/findByIdenCode"; private static final String ROOT_PATH_9 = "/findClientByIdenCode"; private static final String ROOT_PATH_10 = "/removeById"; private static final String ROOT_PATH_11 = "/removeClientById"; private final ServiceBankDatabase serviceBankDatabase; @Autowired public ControllerBankDatabase(ServiceBankDatabase serviceBankDatabase) { this.serviceBankDatabase = serviceBankDatabase; } @RequestMapping(value = "/") public String homeBankDatabase() { return "home"; } //@RequestMapping(value = ROOT_PATH_1, method = RequestMethod.GET) @GetMapping(value = ROOT_PATH_1) public ModelAndView newDepositor() { return new ModelAndView("depositor", "client", new Depositor()); } //@RequestMapping(value = "/addDepositor", method = RequestMethod.POST) @PostMapping(value = ROOT_PATH_2) public String addDepositor(@ModelAttribute("client") Depositor depositor) { serviceBankDatabase.addClientOfBank(depositor); return "home"; } @RequestMapping(value = ROOT_PATH_3) public String showAllDepositor(Model model) { List<Depositor> list = serviceBankDatabase.showAllClientOfBank(); model.addAttribute("list", list); return "allClients"; } @RequestMapping(value = ROOT_PATH_4) public String findById() { return "findById/findById"; } @RequestMapping(value = ROOT_PATH_5) public String findClientById(Model model, HttpServletRequest request) { String id = request.getParameter("clientId"); Integer id1 = Integer.valueOf(id); Depositor depositor = null; depositor = serviceBankDatabase.findByIdClientOfBank(id1); if (depositor == null) return "findById/findByIdNull"; else { model.addAttribute("depositorOfTheBank", depositor); return "findById/findByIdAnswer"; } } @RequestMapping(value = ROOT_PATH_6 ) public String findBySername() { return "findBySername/findBySername"; } @RequestMapping(value = ROOT_PATH_7) public String findClientBySername(Model model, HttpServletRequest request) { String sername = null; sername = (String)request.getParameter("clientSername"); Depositor depositor = null; depositor = serviceBankDatabase.findBySernameClientOfBank(sername); if (depositor == null) return "findBySername/findBySernameNull"; else { model.addAttribute("depositorOfTheBank", depositor); return "findBySername/findBySernameAnswer"; } } @RequestMapping(value = ROOT_PATH_8) public String findByIdenCode() { return "findByIdenCode/idenCode"; } @RequestMapping(value = ROOT_PATH_9) public String findClientByIdenCode(Model model, HttpServletRequest request) { String idenCode = request.getParameter("clientIdenCode"); Integer idenCode1 = Integer.valueOf(idenCode); //Depositor depositor = null; //depositor = serviceBankDatabase.findByIdentificationCode(idenCode1); if (serviceBankDatabase.findByIdentificationCode(idenCode1) == null) return "findByIdenCode/idenCodeNull"; else { model.addAttribute("depositorOfTheBank", serviceBankDatabase.findByIdentificationCode(idenCode1)); return "findByIdenCode/idenCodeAnswer"; } } @RequestMapping(value = ROOT_PATH_10) public String removeById() { return "remove/removeId"; } @RequestMapping(value = ROOT_PATH_11) public String removeDepositorById(Model model, HttpServletRequest request) { String id = request.getParameter("removeDepositorId"); Integer id1 = Integer.valueOf(id); Depositor depositor = serviceBankDatabase.findByIdClientOfBank(id1); if (depositor == null) return "remove/removeNull"; else { serviceBankDatabase.removeClientOfBank(depositor); return "remove/removeAnswer"; } } }
Сервис
package bank.database.service; import bank.database.persistence.model.Depositor; import bank.database.persistence.repository.DaoBankDatabase; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service public class ServiceBankDatabaseImpl implements ServiceBankDatabase { @Autowired private DaoBankDatabase daoBankDatabase; @Override @Transactional public void addClientOfBank(Depositor depositor) { daoBankDatabase.addClientOfBank(depositor); } @Override @Transactional public void removeClientOfBank(Depositor depositor) { daoBankDatabase.removeClientOfBank(depositor); } @Override @Transactional public List<Depositor> showAllClientOfBank() { return daoBankDatabase.showAllClientOfBank(); } @Override @Transactional public Depositor findByIdClientOfBank(Integer id) { return daoBankDatabase.findByIdClientOfBank(id); } @Override @Transactional public Depositor findBySernameClientOfBank(String sername) { return daoBankDatabase.findBySernameClientOfBank(sername); } @Override @Transactional public Depositor findByIdentificationCode(Integer identificationCode) { return daoBankDatabase.findByIdentificationCode(identificationCode); } }
Дао
package bank.database.persistence.repository; import bank.database.persistence.model.Depositor; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Repository public class DaoBankDatabaseImpl implements DaoBankDatabase { @Autowired private SessionFactory sessionFactory; @Override public void addClientOfBank(Depositor depositor) { sessionFactory.getCurrentSession().saveOrUpdate(depositor); } @Override public void removeClientOfBank(Depositor depositor) { sessionFactory.getCurrentSession().delete(depositor); } @Override public List<Depositor> showAllClientOfBank() { return sessionFactory.getCurrentSession().createQuery("from Depositor").list(); } @Override public Depositor findByIdClientOfBank(Integer id) { Depositor depositor = sessionFactory.getCurrentSession().get(Depositor.class, id); return depositor; } @Override public Depositor findBySernameClientOfBank(String sername) { Depositor depositor1 = sessionFactory.getCurrentSession().load(Depositor.class,sername); return depositor1; } @Override public Depositor findByIdentificationCode(Integer identificationCode) { //Depositor depositor = sessionFactory.getCurrentSession().get(Depositor.class, identificationCode); Depositor depositor1 = sessionFactory.getCurrentSession().load(Depositor.class,identificationCode); return depositor1; } }
Модель
package bank.database.persistence.model; import org.hibernate.annotations.Proxy; import javax.persistence.*; @Entity @Table public class Depositor { @Column @Id private Integer id; @Column private String name; @Column private String sername; @Column private int amountOfDeposit; @Column private int depositePercent; @Column private Integer identificationCode; public Depositor() { } public Depositor(Integer id, String name, String sername, int amountOfDeposit, int depositePercent, Integer identificationCode) { this.id = id; this.name = name; this.sername = sername; this.amountOfDeposit = amountOfDeposit; this.depositePercent = depositePercent; this.identificationCode = identificationCode; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSername() { return sername; } public void setSername(String sername) { this.sername = sername; } public int getAmountOfDeposit() { return amountOfDeposit; } public void setAmountOfDeposit(int amountOfDeposit) { this.amountOfDeposit = amountOfDeposit; } public int getDepositePercent() { return depositePercent; } public void setDepositePercent(int depositePercent) { this.depositePercent = depositePercent; } public Integer getIdentificationCode() { return identificationCode; } public void setIdentificationCode(Integer identificationCode) { this.identificationCode = identificationCode; } }
Полный тест программы
https://github.com/VoloshchukTaras/BankDatabase
Подскажите, пожалуйста, в чем причина этой ошибки?
Ну и ошибку выбрасывает при попытке найти вкладчика по фамилией, но там пишет, что тот тип.