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:

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;
    }
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)


Voici la requete générée
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=?
et la suite est plus génante:
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 (?, ?, ?)
pourquoi ce delete et les insert?????