i have this problem when i want to add a new product exactly when i want to select from cascading dropdown list, this exception below is thrown :
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.gestion.mvc.entities.Rubrique.articles, could not initialize proxy - no Session
Here is my entities
Article :
@Entity
@Table(name = "article")
public class Article implements Serializable {
@Id
@GeneratedValue
private Long idArticle;
private String codeArt;
private String refArt;
private String refArtPro;
private String designationC;
private String designationL;
private BigDecimal prixUnitaireDevise;
private BigDecimal pump;
private String obligation;
private BigDecimal quantiteMax;
private BigDecimal quantiteMin;
private BigDecimal quantiteReapp;
private BigDecimal seuilDeReapp;
private BigDecimal quantiteCibleAnnee;
private BigDecimal quantite;
private BigDecimal prixUnitaireHT;
private BigDecimal tauxTva;
private BigDecimal prixUnitaireTTC;
@ManyToOne
@JoinColumn(name = "idRubrique")
private Rubrique rubrique;
@ManyToOne
@JoinColumn(name = "idFournisseur")
private Fournisseur fournisseur;
private String paysProvenance;
private String paysOrigine;
private String monnaie;
@ManyToOne
@JoinColumn(name = "idDrapeau")
private Drapeau drapeau;
@ManyToOne
@JoinColumn(name="idSRubrique" )
private SRubrique srubrique;
@ManyToOne
@JoinColumn(name="idSSRubrique")
private SSRubrique ssrubrique;
public Article() {
super();
}
public Long getIdArticle() {
return idArticle;
}
public void setIdArticle(Long idArticle) {
this.idArticle = idArticle;
}
public String getCodeArt() {
return codeArt;
}
public void setCodeArt(String codeArt) {
this.codeArt = codeArt;
}
public String getRefArt() {
return refArt;
}
public void setRefArt(String refArt) {
this.refArt = refArt;
}
public String getRefArtPro() {
return refArtPro;
}
public void setRefArtPro(String refArtPro) {
this.refArtPro = refArtPro;
}
public String getDesignationC() {
return designationC;
}
public void setDesignationC(String designationC) {
this.designationC = designationC;
}
public BigDecimal getQuantite() {
return quantite;
}
public void setQuantite(BigDecimal quantite) {
this.quantite = quantite;
}
public String getDesignationL() {
return designationL;
}
public void setDesignationL(String designationL) {
this.designationL = designationL;
}
public BigDecimal getPrixUnitaireHT() {
return prixUnitaireHT;
}
public void setPrixUnitaireHT(BigDecimal prixUnitaireHT) {
this.prixUnitaireHT = prixUnitaireHT;
}
public BigDecimal getTauxTva() {
return tauxTva;
}
public void setTauxTva(BigDecimal tauxTva) {
this.tauxTva = tauxTva;
}
public BigDecimal getPrixUnitaireTTC() {
return prixUnitaireTTC;
}
public void setPrixUnitaireTTC(BigDecimal prixUnitaireTTC) {
this.prixUnitaireTTC = prixUnitaireTTC;
}
public Rubrique getRubrique() {
return rubrique;
}
public void setRubrique(Rubrique rubrique) {
this.rubrique = rubrique;
}
public Fournisseur getFournisseur() {
return fournisseur;
}
public void setFournisseur(Fournisseur fournisseur) {
this.fournisseur = fournisseur;
}
public BigDecimal getPrixUnitaireDevise() {
return prixUnitaireDevise;
}
public void setPrixUnitaireDevise(BigDecimal prixUnitaireDevise) {
this.prixUnitaireDevise = prixUnitaireDevise;
}
public BigDecimal getPump() {
return pump;
}
public void setPump(BigDecimal pump) {
this.pump = pump;
}
public String getObligation() {
return obligation;
}
public void setObligation(String obligation) {
this.obligation = obligation;
}
public BigDecimal getQuantiteMax() {
return quantiteMax;
}
public void setQuantiteMax(BigDecimal quantiteMax) {
this.quantiteMax = quantiteMax;
}
public BigDecimal getQuantiteMin() {
return quantiteMin;
}
public void setQuantiteMin(BigDecimal quantiteMin) {
this.quantiteMin = quantiteMin;
}
public BigDecimal getQuantiteReapp() {
return quantiteReapp;
}
public void setQuantiteReapp(BigDecimal quantiteReapp) {
this.quantiteReapp = quantiteReapp;
}
public BigDecimal getSeuilDeReapp() {
return seuilDeReapp;
}
public void setSeuilDeReapp(BigDecimal seuilDeReapp) {
this.seuilDeReapp = seuilDeReapp;
}
public BigDecimal getQuantiteCibleAnnee() {
return quantiteCibleAnnee;
}
public void setQuantiteCibleAnnee(BigDecimal quantiteCibleAnnee) {
this.quantiteCibleAnnee = quantiteCibleAnnee;
}
public Drapeau getDrapeau() {
return drapeau;
}
public void setDrapeau(Drapeau drapeau) {
this.drapeau = drapeau;
}
public String getPaysProvenance() {
return paysProvenance;
}
public void setPaysProvenance(String paysProvenance) {
this.paysProvenance = paysProvenance;
}
public String getPaysOrigine() {
return paysOrigine;
}
public void setPaysOrigine(String paysOrigine) {
this.paysOrigine = paysOrigine;
}
public String getMonnaie() {
return monnaie;
}
public void setMonnaie(String monnaie) {
this.monnaie = monnaie;
}
public SRubrique getSrubrique() {
return srubrique;
}
public void setSrubrique(SRubrique srubrique) {
this.srubrique = srubrique;
}
public SSRubrique getSsrubrique() {
return ssrubrique;
}
public void setSsrubrique(SSRubrique ssrubrique) {
this.ssrubrique = ssrubrique;
}
}
Rubrique:
@Entity
@Table(name = "rubrique")
public class Rubrique implements Serializable {
@Id
@GeneratedValue
private Long idRubrique;
private String codeRubrique;
private String designation;
@OneToMany(mappedBy = "rubrique" )
private List<Article> articles;
@OneToMany(mappedBy = "rubrique")
private List<SRubrique> srubriques;
@OneToMany(mappedBy ="rubrique")
private List <Fournisseur> fournisseurs;
public Rubrique() {
}
public Long getIdRubrique() {
return idRubrique;
}
public void setIdRubrique(Long idRubrique) {
this.idRubrique = idRubrique;
}
public String getCodeRubrique() {
return codeRubrique;
}
public void setCodeRubrique(String codeRubrique) {
this.codeRubrique = codeRubrique;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
@JsonIgnore
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
@JsonIgnore
public List<SRubrique> getSrubriques() {
return srubriques;
}
public void setSrubriques(List<SRubrique> srubriques) {
this.srubriques = srubriques;
}
@JsonIgnore
public List<Fournisseur> getFournisseurs() {
return fournisseurs;
}
public void setFournisseurs(List<Fournisseur> fournisseurs) {
this.fournisseurs = fournisseurs;
}
}
Article DAO :
public interface IArticleService {
public Article save(Article entity);
public Article update(Article entity);
void remove(long id);
public List<Article> selectAll();
public List<Article> selectAll(String sortField, String sort);
public Article getById(long id);
public Article findOne(String paramName, Object paramValue);
public Article findOne(String[] paramName, Object[] paramValue);
public int findCountBy(String paramName, String paramValue);
public List<Article> findByFournisseur(long idFrn);
public Article getArticleByCode(String codeArt);
int getCount(String paramName);
}
Article Service :
@Transactional
public class ArticleServiceImpl implements IArticleService {
private IArticleDao dao;
public void setDao(IArticleDao dao) {
this.dao = dao;
}
@Override
public Article save(Article entity) {
return dao.save(entity);
}
@Override
public Article update(Article entity) {
return dao.update(entity);
}
@Override
public void remove(long id) {
dao.remove(id);
}
@Override
public List<Article> selectAll() {
return dao.selectAll();
}
@Override
public List<Article> selectAll(String sortField, String sort) {
return dao.selectAll(sortField, sort);
}
@Override
public Article getById(long id) {
return dao.getById(id);
}
@Override
public Article findOne(String paramName, Object paramValue) {
return dao.findOne(paramName, paramValue);
}
@Override
public Article findOne(String[] paramName, Object[] paramValue) {
return dao.findOne(paramName, paramValue);
}
@Override
public int findCountBy(String paramName, String paramValue) {
return dao.findCountBy(paramName, paramValue);
}
@Override
public List<Article> findByFournisseur(long idFrn) {
return dao.findByFournisseur(idFrn);
}
@Override
public Article getArticleByCode(String codeArt) {
return dao.getArticleByCode(codeArt);
}
@Override
public int getCount(String paramName) {
return dao.getCount(paramName);
}
}
Controller, which calls the model look like :
@Controller
@RequestMapping(value = "/article")
public class ArticleController {
@Autowired
private IArticleService articleService;
@Autowired
private IRubriqueService rubriqueService;
@Autowired
private IFournisseurService fournisseurService;
@Autowired
private ISRubriqueService srubriqueService;
@Autowired
private ISSRubriqueService ssrubriqueService;
@Autowired
private IDrapeauService drapeauService;
@Autowired
private IPaysService paysService;
@Autowired
GenerateCodeAuto genCodeArt;
@Autowired
@Qualifier("articleExporter")
private FileExporter exporter;
@RequestMapping(value = "/")
public String article(Model model) {
List<Article> listArticle = articleService.selectAll();
if (listArticle == null) {
listArticle = new ArrayList<Article>();
}
model.addAttribute("listArt", listArticle);
return "article/article";
}
@RequestMapping(value = "/loadArticle")
@ResponseBody
public List<Article> JSONArticle() {
return articleService.selectAll();
}
@RequestMapping(value = "/JSONmodifier/{idArticle}")
@ResponseBody
public Article JSONmodifierArticle(Model model, @PathVariable Long idArticle) {
return articleService.getById(idArticle);
}
@RequestMapping(value = "/nouveau", method = RequestMethod.GET)
public String ajouterArticle(Model model) {
Article article = new Article();
article.setCodeArt(genCodeArt.GenerateCodeArt("ART%02d", "idArticle"));
List<Rubrique> listRubrique = rubriqueService.selectAll("designation", "asc");
List<Fournisseur> listFournisseur = fournisseurService.selectAll();
List<Drapeau> listDrapeau = drapeauService.selectAll();
List<Pays> listPays = paysService.selectAll();
if (listRubrique == null) {
listRubrique = new ArrayList<Rubrique>();
}
if (listFournisseur == null) {
listFournisseur = new ArrayList<Fournisseur>();
}
if (listDrapeau == null) {
listDrapeau = new ArrayList<Drapeau>();
}
if (listPays == null) {
listPays = new ArrayList<Pays>();
}
model.addAttribute("article", article);
model.addAttribute("listRub", listRubrique);
model.addAttribute("listFrn", listFournisseur);
model.addAttribute("listDrp", listDrapeau);
model.addAttribute("listPays", listPays);
return "article/ajouterArticle";
}
@RequestMapping(value = "/enregistrer")
public String enregistrerArticle(Model model, Article article) {
if (article != null) {
if (article.getIdArticle() != null) {
articleService.update(article);
} else {
articleService.save(article);
}
}
return "redirect:/article/";
}
@RequestMapping(value = "/modifier", method = RequestMethod.GET)
public String modifierArticle(Model model, @RequestParam("idArticle") Long idArticle) {
Article article = new Article();
if (idArticle != null) {
article = articleService.getById(idArticle);
List<Rubrique> listRubrique = rubriqueService.selectAll();
List<Fournisseur> listFournisseur = fournisseurService.selectAll();
List<Drapeau> listDrapeau = drapeauService.selectAll();
List<Pays> listPays = paysService.selectAll();
Long idRub = article.getRubrique().getIdRubrique();
List<SRubrique> listSRub = srubriqueService.findByRubrique(idRub);
Long idSRub;
List<SSRubrique> listSSRub;
if (article.getSrubrique().getIdSRubrique() != null) {
idSRub = article.getSrubrique().getIdSRubrique();
} else {
idSRub = null;
}
listSSRub = ssrubriqueService.findBySRubrique(idSRub);
if (listRubrique == null) {
listRubrique = new ArrayList<Rubrique>();
}
if (listFournisseur == null) {
listFournisseur = new ArrayList<Fournisseur>();
}
if (listDrapeau == null) {
listDrapeau = new ArrayList<Drapeau>();
}
if (listPays == null) {
listPays = new ArrayList<Pays>();
}
if (listSRub == null) {
listSRub = new ArrayList<SRubrique>();
}
if (listSSRub == null) {
listSSRub = new ArrayList<SSRubrique>();
}
model.addAttribute("listRub", listRubrique);
model.addAttribute("listFrn", listFournisseur);
model.addAttribute("listDrp", listDrapeau);
model.addAttribute("listPays", listPays);
model.addAttribute("listSRub", listSRub);
model.addAttribute("listSSRub", listSSRub);
if (article != null) {
model.addAttribute("article", article);
}
}
return "article/ajouterArticle";
}
@RequestMapping(value = "/supprimer/{idArticle}")
public String supprimerArticle(Model model, @PathVariable Long idArticle) {
if (idArticle != null) {
Article article = articleService.getById(idArticle);
if (article != null) {
articleService.remove(idArticle);
}
}
return "redirect:/article/";
}
@RequestMapping(value = "/export/")
public String ExportArticles(HttpServletResponse response) {
exporter.exportDataToExcel(response, null, null);
return "article/article";
}
@RequestMapping(value = "/loadSrub", method = RequestMethod.GET)
@ResponseBody
public List<SRubrique> ajouterSRub(@RequestParam(value = "idRubrique") long id) {
return srubriqueService.findByRubrique(id);
}
@RequestMapping(value = "/loadSSrub", method = RequestMethod.GET)
@ResponseBody
public List<SSRubrique> ajouterSSRub(@RequestParam("idSRubrique") long id) {
return ssrubriqueService.findBySRubrique(id);
}
}
JSP Page : this picture shows when the exception is raised
i think the exception is raised by this function ajouterSRub(@RequestParam(value = "idRubrique") long id ), in this function i'm trying to retrieve the id of rubrique then with that id retrieve the list of sous rubrique, after that send it to javascript page in order to display it into sous Rubrique dropdown. Everything was working fine untill the day i have implemented the spring security.