java - 如何修复休眠异常“无法延迟初始化角色集合”
问题描述
当我想添加新产品时,我遇到了这个问题,而我想从级联下拉列表中进行选择时,会抛出以下异常:
org.hibernate.LazyInitializationException:无法延迟初始化角色集合:com.gestion.mvc.entities.Rubrique.articles,无法初始化代理 - 无会话
这是我的实体
文章 :
@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;
}
}
量规:
@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;
}
}
文章 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);
}
文章服务:
@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
@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 页面: 此图显示引发异常的时间
我认为这个函数 ajouterSRub(@RequestParam(value = "idRubrique") long id ) 引发了异常,在这个函数中,我试图检索 rubrique 的 id,然后用该 id 检索 rubrique 的列表,之后将其发送到 javascript 页面,以便将其显示到 sous Rubrique 下拉列表中。直到我实施春季安全措施的那一天,一切都运行良好。
解决方案
推荐阅读
- c# - WPF 数据绑定和依赖属性
- sql-server - 选择日期部分年份然后分组并具有日期部分
- javascript - 使用 JS DOM 的动态表
- python - Keras:损失在inf和number之间波动
- c# - 从 C# 中的键/值集合中读取特定的 HTTP 标头值
- visual-studio-extensions - VSIX - 文本视图关闭时的事件
- css - 调整一些图像宽度以保持在父级内,水平对齐
- android - 在 Firebase 中为用户 ID 创建增量方法
- string - class java.lang.String (substring) boolean/if 语句错误
- angular - Angular CDK 使用 cdkDropListConnectedTo 连接多个拖放区