我有一個lazyInitialization問題,嘗試使用StreamedContent
類型從mysql數據庫加載圖像(BLOB)到<p:graphicImage>
(Primefaces)。我正在使用JSF + Spring + Hibernate,當我嘗試加載圖像時,我得到了org.hibernate.LazyInitializationException
。這裏是代碼。感謝名單。org.hibernate.LazyInitializationException嘗試訪問實體中的BLOB字段
這裏是支持bean:
public class AccueilBean implements Serializable {
private CategorieService categorieService;
private List<Categorie> categories;
private StreamedContent dbImg;
public AccueilBean(){
}
@PostConstruct
public void init() {
this.categories = new ArrayList<Categorie>();
categories=categorieService.listerCategorie();
}
public List<Categorie> getCategories(){
return this.categories;
}
public CategorieService getCategorieService() {
return categorieService;
}
public void setCategorieService(CategorieService categorieService) {
this.categorieService = categorieService;
}
public StreamedContent getDbImg() {
InputStream dbStream = null;
dbImg = null;
FacesContext context = FacesContext.getCurrentInstance();
Categorie cat = context.getApplication().evaluateExpressionGet(context, "#{cat}", Categorie.class);
Long id = cat.getId();
Categorie ctg_aux = categorieService.getCategorie(id);
System.out.println(ctg_aux.getImage());
try {
dbStream = ctg_aux.getImage().getBinaryStream();
dbImg = new DefaultStreamedContent(dbStream,"image/jpeg");
}
catch (SQLException e) {System.out.println("erreur");}
return dbImg;
}
}
這裏是.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<body>
<h:form>
<p:dataGrid columns="3" var="cat" value="#{accueilBean.categories}">
<p:column>
<p:graphicImage value="#{accueilBean.dbImg}" >
</p:graphicImage>
</p:column>
</p:dataGrid>
</h:form>
</body>
</html>
這裏是Categorie實體的映射;
<class name="tn.projet.model.Categorie" table="CATEGORIE">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="increment" />
</id>
<property name="nom" type="java.lang.String">
<column name="NOM" />
</property>
<property name="desc" type="java.lang.String">
<column name="DESCRIPTION" />
</property>
<property name="image" type="java.sql.Blob">
<column name="IMAGE" />
</property>
<set name="produits" table="PRODUIT" inverse="false" lazy="true">
<key>
<column name="ID" />
</key>
<one-to-many class="tn.projet.model.Produit" />
</set>
</class>
你能告訴如何的'CategorieService#getCategorie(ID)'方法看起來身體喜歡? – 2011-12-20 21:51:07
我已經做到了,有什麼建議嗎? – 2011-12-21 10:13:42