voila en jetant un coup d'oeil dans les logs, je mes uis apercu qu'Hibernate génere des requetes sql inutiles et incohérente:
g le schéma suivant:
Caracteristique * -------- Carac_Produit --------- * Produit
numC . valeur . numP
libelle
carac_produit est mappé en élément composite pour un Set (donc pas de requete hql possible)
une partie du mapping
<hibernate-mapping>
<class name="dao.Produit" table="PRODUIT">
<id name="numProduit" type="int" unsaved-value="null" >
<column name="numProduit" sql-type="int(11)" not-null="true"/>
<generator class="increment" />
</id>
...
<set name="listCaract" table="CARAC_PRODUIT" lazy="true">
<key column="numP"/>
<composite-element class="dao.CaracProduit">
<property name="valeur" column="valeur" />
<many-to-one name="carac" column="numCarac" />
</composite-element>
</set>
</class>
</hibernate-mapping>
pour récupérer les caractéristiques d'un produit + les valeurs associées g la fonction suivante:
je récupere un produit puis je récupere la liste des carac_produits (valeurs) puis je charge les éléments caractéristiques (a cause du lazy loading)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public Set<CaracProduit> getCaractProduitById(int idProduit ) throws Exception { Session session = this.getSession(); Transaction tx = session.beginTransaction(); Produit p = (Produit) session.load(Produit.class, idProduit); Set<CaracProduit> lst = p.getListCaract(); for (CaracProduit car: lst){ Hibernate.initialize(car.getCarac()); } tx.commit(); session.flush(); return lst; }
Voici la requete générée
et la suite est plus génante:Hibernate: select produit0_.numProduit as numProduit0_, produit0_.libelleP as libelleP7_0_, produit0_.designationP as designat3_7_0_, produit0_.refFourProduit as refFourP4_7_0_, produit0_.prixP as prixP7_0_, produit0_.stockP as stockP7_0_, produit0_.nbConsultation as nbConsul7_7_0_, produit0_.promo as promo7_0_, produit0_.etatP as etatP7_0_, produit0_.refCategorie as refCate10_7_0_, produit0_.refConstructeur as refCons11_7_0_ from PRODUIT produit0_ where produit0_.numProduit=?
Hibernate: select listcaract0_.numP as numP0_, listcaract0_.valeur as valeur0_, listcaract0_.numCarac as numCarac0_ from CARAC_PRODUIT listcaract0_ where listcaract0_.numP=?
Hibernate: select caracteris0_.numCaracteristique as numCarac1_0_, caracteris0_.libelleCarac as libelleC2_10_0_ from CARACTERISTIQUE caracteris0_ where caracteris0_.numCaracteristique=?
Hibernate: select caracteris0_.numCaracteristique as numCarac1_0_, caracteris0_.libelleCarac as libelleC2_10_0_ from CARACTERISTIQUE caracteris0_ where caracteris0_.numCaracteristique=?
Hibernate: select caracteris0_.numCaracteristique as numCarac1_0_, caracteris0_.libelleCarac as libelleC2_10_0_ from CARACTERISTIQUE caracteris0_ where caracteris0_.numCaracteristique=?
Hibernate: select caracteris0_.numCaracteristique as numCarac1_0_, caracteris0_.libelleCarac as libelleC2_10_0_ from CARACTERISTIQUE caracteris0_ where caracteris0_.numCaracteristique=?
Hibernate: select caracteris0_.numCaracteristique as numCarac1_0_, caracteris0_.libelleCarac as libelleC2_10_0_ from CARACTERISTIQUE caracteris0_ where caracteris0_.numCaracteristique=?
Hibernate: select caracteris0_.numCaracteristique as numCarac1_0_, caracteris0_.libelleCarac as libelleC2_10_0_ from CARACTERISTIQUE caracteris0_ where caracteris0_.numCaracteristique=?
Hibernate: select caracteris0_.numCaracteristique as numCarac1_0_, caracteris0_.libelleCarac as libelleC2_10_0_ from CARACTERISTIQUE caracteris0_ where caracteris0_.numCaracteristique=?
pourquoi ce delete et les insert?????Hibernate: delete from CARAC_PRODUIT where numP=? and valeur=? and numCarac=?
Hibernate: insert into CARAC_PRODUIT (numP, valeur, numCarac) values (?, ?, ?)
Hibernate: insert into CARAC_PRODUIT (numP, valeur, numCarac) values (?, ?, ?)
Hibernate: insert into CARAC_PRODUIT (numP, valeur, numCarac) values (?, ?, ?)
Hibernate: insert into CARAC_PRODUIT (numP, valeur, numCarac) values (?, ?, ?)
Hibernate: insert into CARAC_PRODUIT (numP, valeur, numCarac) values (?, ?, ?)
Hibernate: insert into CARAC_PRODUIT (numP, valeur, numCarac) values (?, ?, ?)
Hibernate: insert into CARAC_PRODUIT (numP, valeur, numCarac) values (?, ?, ?)
Partager