Bonsoir à tous,
Je suis plutôt embété par Hibernate, qui ne veut pas faire ce que je lui demande, et je pense que c'est une option que j'ai du oublié dans ma mapping one to many.
Je vous poste rapidement mes hbm, et vous en dit plus après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.toto.srh.adminChargement.data" schema="SRH1"> <class name="AdminChargement" table="SRHQT0B" lazy="false"> <id name="idParametre" type="integer" column="ID_PARAMETRE"> <generator class="assigned"/> </id> <many-to-one name="typeFichier" class="com.inetpsa.srh.typeFichier.data.TypeFichier" column="ID_REF_FICHIER" cascade="all" not-null="true" /> <property name="gere" type="boolean" column="FLAG_GERE" /> <property name="codeParametre" type="string" column="CODE_PARAMETRE" /> <property name="dateDebutValidite" type="date" column="DATE_DEBUT_VALIDITE"/> <property name="dateFinValidite" type="date" column="DATE_FIN_VALIDITE"/> <property name="profondeurHistorique" type="date" column="PROFONDEUR_HISTORIQUE"/> <property name="pays" type="string" column="PAYS"/> <property name="societe" type="string" column="SOCIETE"/> <property name="siLocal" type="string" column="SI_LOCAL"/> <property name="population" type="string" column="POPULATION"/> <property name="dateCreation" type="date" column="DATE_CREATION"/> <property name="datemodification" type="date" column="DATE_MODIFICATION"/> <property name="userModification" type="string" column="USER_MODIFICATION"/> <set name="rubriqueList" lazy="false" > <key property-ref="codeParametre" column="CODE_INFORMATION" unique="false" not-null="true"/> <one-to-many class="Rubrique" not-found="exception"/> </set> </class> </hibernate-mapping>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.toto.srh.adminChargement.data" schema="SRH1"> <class name="Rubrique" table="SRHQT0P" lazy="false"> <id name="codeRubrique" type="string" column="CODE_RUBRIQUE" length="10" > <generator class="assigned"/> </id> <property name="codeParametre" type="string" column="CODE_INFORMATION" length="5" update="false" insert="false" /> <property name="libelleRubrique" type="string" column="LIB_RUBRIQUE" length="50" /> <property name="formatRubrique" type="string" column="FORMAT_RUBRIQUE" length="100" /> <property name="toCapitalize" type="boolean" column="FLAG_CAPITALIZE" /> <property name="obligatoire" type="boolean" column="FLAG_OBLIGATOIRE" /> <property name="dateCreation" type="date" column="DATE_CREATION"/> <property name="datemodification" type="date" column="DATE_MODIFICATION"/> <property name="userModification" type="string" column="USER_MODIFICATION"/> </class> </hibernate-mapping>
Et le bout de code qui me génère une exception :
Dans ma table SRHQT0B(AdminChargement), j'ai une clé générée par une séquence, mais je peux avoir plusieurs CODE_PARAMETRE identiques.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public List<AdminChargement> findValideInformationByTypeFichier( TypeFichier typeFichier) { List<AdminChargement> listInformation = new ArrayList<AdminChargement>(); Session session = getSession(); try{ Criteria criteria = session.createCriteria(AdminChargement.class) .add(Restrictions.eq("gere", true)) .add(Restrictions.eq("typeFichier", typeFichier)) .add(Restrictions.or( Restrictions.and( Restrictions.le("dateDebutValidite", new Date()), Restrictions.ge("dateFinValidite", new Date())), Restrictions.and( Restrictions.le("dateDebutValidite", new Date()), Restrictions.isNull("dateFinValidite")) ) ); listInformation = (List<AdminChargement>) criteria.list(); } catch(Exception e){ log.error(e.getMessage()); } finally{ session.close(); } return listInformation; }
Ma table SRHQT0P (Rubrique) contient le détail des CODE_INFORMATION, et j'ai comme relation SRHQT0B.CODE_PARAMETRE = SRHQT0P.CODE_INFORMATION.
En SQL, pas de problèmes, les requêtes générées par Hibernate me renvoie bien ce que je veux.
Quand j'ai une entrée dans AdminChargement qui me renvoie vers plusieurs entrrées dans Rubriques, tout se passe bien également.
Mon pb, c'est quand j'ai plusieurs entrée dans AdminChargement pour un code information identique, et qui me renvoie vers les mêmes lignes dans Rubriques....
A ce moment, il me pète une exception :
Alors qu'en soit, en SQL, je récupère bien ce que je cherche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part collection is not associated with any session
Je pense qu'il se perd car les deux objets AdminChargements, pointent tous les deux vers les mêmes lignes de Rubriques....
J'ai un peu éclusé toutes les ressources que j'ai pu trouvé.... et le besoin est urgent...
Merci d'avance pour vos réponses.....
Partager