IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Problème de requête sur une vue Hibernate


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut Problème de requête sur une vue Hibernate
    Bonjour,

    J'aimerais savoir s'il est possible d'appeler une requête pour afficher le contenu d'une vue?

    Voici mon code :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    package INTetatACAV.etatACAV.metier.manager;
     
    import java.util.ArrayList;
    import java.util.List;
     
     
    import org.hibernate.HibernateException;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
     
     
    import INTutil.HibernateUtil;
     
    public class MifetatACAVManager {
     
    	public List rechercheEtatACAV(Long id_acav, Long numero, String support, Double passif, Double actif, Double en_attente){
     
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		Transaction trx = session.beginTransaction();
    		List listEtatACAV = new ArrayList();
    		String select ="";
    		String from = "";
    		String requeteHQL="";
    		try{
     
    			listEtatACAV=session.createQuery("from ETAT_ACAV ORDER BY id_acav ASC").list();
     
    			System.out.println("tete :"+listEtatACAV);
     
     
     
    		}catch (HibernateException he){
    			he.printStackTrace();
    			return null;
    		}catch (Exception e){
    			e.printStackTrace();
    			return null;
    		}finally{
    			session.close();
    		}
    		return listEtatACAV;	
    	}
    }
    Avec une table physique, ça marche bien par contre avec la vue, il me sort une liste vide...

    Voici le test d'une vue simple que je souhaite afficher son contenu :
    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
     
     SELECT  AA.ID_SUPPORT ,
                 VALEUR ,
                 LIBELLE_COURT ,
                 AA.MONTANT_ACAV_A ,
                 MONTANT_ACAV_P ,
                MONTANT_ACAV_ATTENTE , 
                 FA.ID_ACAV_ATTENTE ,
                 FA.ID_FLUX
     
                FROM VL ,
                 MIF_SUPPORT ,
                 ACAV_ACTIF AA ,
                 ACAV_PASSIF ,
                 ACAV_ATTENTE ,
                 FLUX_ACAV_ATTENTE FA
    Pour le mapping je suis passé par ceci :

    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
     
    <?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="INTetatACAV.etatACAV.metier.entite">
       <!--  Couche Hibernate des derniers etats en faisant appel à la vue -->
    	<class name="MIFetatACAV" table="ETAT_ACAV">
    	  <id name="id_acav" column="SEQ_ID_ACAV">
     
                <generator class="native"/>            
          </id>
     
      	   <many-to-one name="idacavattente" column="ID_ACAV_ATTENTE" class="INTetatACAV.etatACAV.metier.entite.MIFAcavAttente"></many-to-one> 
      	   <many-to-one name="idacavpassif" column="ID_ACAV_PASSIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavPassif"></many-to-one>      
      	   <many-to-one name="idacavactif" column="ID_ACAV_ACTIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavActif"></many-to-one>					      
    	</class>
    </hibernate-mapping>
    Et malheureusement il me sort une liste vide à ListEtatACAV et m'affiche ceci :
    Cannot find bean ListEtatACAV in any scope
    hmmm j'ai même ce souci un peu plus haut :

    ETAT_ACAV is not mapped. [from ETAT_ACAV ORDER BY id_acav ASC]


    Or il n'y a pas de formulaire dans la page jsp. Je veux juste afficher le contenu d'une vue pour le moment.

    Merci

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Pour:
    Et malheureusement il me sort une liste vide à ListEtatACAV et m'affiche ceci :
    Cannot find bean ListEtatACAV in any scope
    ça c le pb dans la jsp, il s'attend à un bean, <jsp:usebean id="ListEtatACAV" ...

    Pour:
    ETAT_ACAV is not mapped. [from ETAT_ACAV ORDER BY id_acav ASC]
    tu as quoi pour le mapping des autres class liées (Attente, passif, active) ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Pour:

    ça c le pb dans la jsp, il s'attend à un bean, <jsp:usebean id="ListEtatACAV" ...

    Pour:

    tu as quoi pour le mapping des autres class liées (Attente, passif, active) ?
    Bonjour,
    Hmm disons que quand je dis qu'il me sort une liste vide c'est au niveau d'un System.out.println et non pas au niveau de la page jsp.

    Ce que j'ai pour le mapping des autres class liées (Attente, passif, actif)?
    MIFAcavActif
    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
     
    <?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="INTetatACAV.etatACAV.metier.entite">
    	<class name="MIFAcavActif" table="ACAV_ACTIF">
    	  <id name="id_acav_actif" column="ID_ACAV_ACTIF">
                <generator class="increment"/>
          </id>
          <property name="idsupport" column="ID_SUPPORT" 
          		type="java.lang.Long" not-null="true" length="22" />     		
           <property name="montantacava" column="MONTANT_ACAV_A"
    			type="java.lang.Double" not-null="false" length="15" />   
    		<property name="signeacava" column="SIGNE_ACAV_A"
    			type="string" not-null="true" length="255" />	
    		<property name="datecalculacava" column="DATE_CALCUL_ACAV_A" type="date"
    			not-null="false" length="7" />
    		<property name="derdateacava" column="DER_DATE_ACAV_A" type="date"
    			not-null="false" length="7" />								
    		<property name="nbpartsacava" column="NB_PARTS_ACAV_A"
    			type="java.lang.Double" not-null="false" length="15" />
    		<property name="coursvlacava" column="COURS_VL_ACAV_A"
    			type="java.lang.Double" not-null="false" length="15" />
    		<property name="datevlacava" column="DATE_VL_ACAV_A" type="date"
    			not-null="false" length="7" />				
     
    	</class>
    </hibernate-mapping>
    MIFAcavPassif
    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
     
    <?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="INTetatACAV.etatACAV.metier.entite">
    	<class name="MIFAcavPassif" table="ACAV_PASSIF">
    	  <id name="id_acav_passif" column="ID_ACAV_PASSIF">
                <generator class="increment"/>
          </id>
          <property name="idsupport" column="ID_SUPPORT" 
          		type="java.lang.Long" not-null="true" length="22" />
          <property name="montantacavp" column="MONTANT_ACAV_P"
    			type="java.lang.Double" not-null="false" length="15" />   
    		<property name="signeacavp" column="SIGNE_ACAV_P"
    			type="string" not-null="true" length="255" />	
    		<property name="datecalculacavp" column="DATE_CALCUL_ACAV_P" type="date"
    			not-null="false" length="7" />
    		<property name="derdateacavp" column="DER_DATE_ACAV_P" type="date"
    			not-null="false" length="7" />								
    		<property name="nbpartsacavp" column="NB_PARTS_ACAV_P"
    			type="java.lang.Double" not-null="false" length="15" />
    		<property name="coursvlacavp" column="COURS_VL_ACAV_P"
    			type="java.lang.Double" not-null="false" length="15" />
    		<property name="datevlacavp" column="DATE_VL_ACAV_P" type="date"
    			not-null="false" length="7" />				
     
    	</class>
    </hibernate-mapping>

    MIFAcavAttente
    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
     
    <?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="INTetatACAV.etatACAV.metier.entite">
    	<class name="MIFAcavAttente" table="ACAV_ATTENTE">
    	  <id name="id_acav_attente" column="ID_ACAV_ATTENTE">
                <generator class="increment"/>
          </id>
          <many-to-one name="idsupport" column="ID_SUPPORT" class="INTgestiondonnee.produitsupport.metier.entite.MifProduitSupport" />
     
           <many-to-one name="idacavactif" column="ID_ACAV_ACTIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavActif"  />   
           <property name="idacavpassif" column="ID_ACAV_PASSIF" 
          		type="java.lang.Long" not-null="true" length="22" />
          <many-to-one name="idvl" column="ID_VL" class="INTetatACAV.etatACAV.metier.entite.MIFVL"  />   
    		<property name="dateapplication" column="DATE_APPLICATION" type="date"
    			not-null="false" length="7" />      		   		
           <property name="montantacavattente" column="MONTANT_ACAV_ATTENTE"
    			type="java.lang.Double" not-null="false" length="15" />  
     
     
    	</class>
    </hibernate-mapping>
    Et au lieu de passer par une séquence pour l'id de la vue, on essaie de passer par un composite-id mais je bute à une erreur.

    Voici mon fichier de mapping avec le composite-id:
    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
     
    <?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="INTetatACAV.etatACAV.metier.entite" >
       <!--  Couche Hibernate des derniers etats en faisant appel à la vue -->
    	<class name="MIFetatACAV" table="ETAT_ACAV">
    		  <composite-id name="id_acav"  class="INTetatACAV.etatACAV.metier.entite.MIFetatACAV"  >  
     
     
     	    <key-many-to-one name="idacavattente" column="ID_ACAV_ATTENTE" class="INTetatACAV.etatACAV.metier.entite.MIFAcavAttente"  /> 	  
     	    <key-many-to-one name="idacavpassif" column="ID_ACAV_PASSIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavPassif"/> 
            <key-many-to-one name="idacavactif" column="ID_ACAV_ACTIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavActif"/> 
     
        </composite-id>
     
      	   <many-to-one name="idacavattente" column="ID_ACAV_ATTENTE" class="INTetatACAV.etatACAV.metier.entite.MIFAcavAttente"></many-to-one> 
      	   <many-to-one name="idacavpassif" column="ID_ACAV_PASSIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavPassif"></many-to-one>      
      	   <many-to-one name="idacavactif" column="ID_ACAV_ACTIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavActif"></many-to-one>					      
    	</class>
    </hibernate-mapping>
    et voici le message d'erreur qu'il m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Repeated column in mapping for entity: INTetatACAV.etatACAV.metier.entite.MIFetatACAV column: ID_ACAV_ATTENTE (should be mapped with insert="false" update="false")
    J'ai essayé en rajoutant insert="false" update="false" mais rien n'y fait, ça ne passe pas.

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ok pour la jsp , c parceque j'avais cru voir jsp et moi ça c mon dada (enfin faut pas trop en abuser ...)

    Pour insert et update c bien dans les many-to-one des property et non dans la clés composées des many to one ???
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Fench Voir le message
    Ok pour la jsp , c parceque j'avais cru voir jsp et moi ça c mon dada (enfin faut pas trop en abuser ...)

    Pour insert et update c bien dans les many-to-one des property et non dans la clés composées des many to one ???
    Oui en principe mais je ne comprend pas pourquoi il me demande d'ajouter ça update="false" insert="false" Ok effectivement quand je le place dans les many-to-one il me demande ceci : composite-id class must implement Serializable: INTetatACAV.etatACAV.metier.entite.MIFetatACAV
    Ok je pense qu'il faut que je fasse une class qui implement serializable.

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Oui ça c sûr en plus le composite-id je connais pas trop ...

    Mais parcontre en relisant l'erreur du début, tu as regardé des ex de composite-id avec ensuite une déclaration de plusieurs many-to-one ...
    pour lui, ya deux fois la même déclarations de colonnes !!!

    Sinon, j'vois plus et j'vais manger ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Fench Voir le message
    Oui ça c sûr en plus le composite-id je connais pas trop ...

    Mais parcontre en relisant l'erreur du début, tu as regardé des ex de composite-id avec ensuite une déclaration de plusieurs many-to-one ...
    pour lui, ya deux fois la même déclarations de colonnes !!!

    Sinon, j'vois plus et j'vais manger ...
    Bon ap ! Oui, j'ai regardé des exemple de composite-id mais pas avec plusieurs many-to-one, du moins ayant le meme cas que moi. Merci tout de meme pour l'aide.

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Pour le serializable moi je le fais toujours et c normal ...

    public class UneTale extends Object implements Serializable
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Fench Voir le message
    Pour le serializable moi je le fais toujours et c normal ...
    Disons que le serializable est plutôt normal lorsque l'on veut utiliser des composite-id.

    Sinon j'ai pas d'exemple même de composite-id enchainé avec des many-to-one mais ça ne devrait pas changer grand chose des properties.
    Ceci dit, je me suis basé sur ce tuto qui est assez sympa pour comprendre les composite-id:
    http://www.titouille.ch/node/151

    J'ai suivi les instructions sauf au niveau des SET car normalement dans mon développement j'ai une classe manager avec la requête.
    Je ne sais pas si je suis obligé de passer par un set dans la classe objet.

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Pour serializable, c pour la persistence et moi je croyais que c'était à chaque fois que l'on utilise des sauvegardes ou des flux (dans ma ptite tête c comme la différence entre série et parallèle)

    Je vais re-regarder cela pour les instances de ces objets l'année prochaine je crois

    Sinon, j'avais parcourus un autre lien pour ton pb et j'avais vu le set du nom de la property que tu utilises dans le mapping.
    Ce lien est
    http://www.hibernate.org/hib_docs/v3...l/mapping.html
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  11. #11
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Pour serializable, c pour la persistence et moi je croyais que c'était à chaque fois que l'on utilise des sauvegardes ou des flux (dans ma ptite tête c comme la différence entre série et parallèle)

    Je vais re-regarder cela pour les instances de ces objets l'année prochaine je crois

    Sinon, j'avais parcourus un autre lien pour ton pb et j'avais vu le set du nom de la property que tu utilises dans le mapping.
    Ce lien est
    http://www.hibernate.org/hib_docs/v3...l/mapping.html
    oui et non le serializable n'est pas obligé, ça dépend de ce que tu veux faire comme mapping. Si c'est un mapping simple d'une table, tu n'as pas besoin de faire un serializable. Par contre quand ça se complexe comme avec une composite-id alors là il faut passer par un serializable. Enfin c'est ce que j'ai compris et puis moi et l'informatique :-)
    Je ne comprend pas toujours les phrases avec les termes techniques... Il faut m'expliquer avec des phrases clairs...
    Oui, j'ai déjà parcouru cette doc de la référence d'hibernate. Merci.
    Enfin bon après la lecture du tuto, je me retrouve avec le problème du début concernant le scope. Enfin faut que je vois, je dois peut etre mal récupérer au niveau de la requete. Enfin c'est un peu le fouilli.

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Juste un truc en laissant tomber le mapping ...

    Pourquoi fait tu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		List listEtatACAV = new ArrayList();
    Je ferrais (et j'ai regardé dans d'autres codes), directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List listEtatACAV = session.createQuery("from ETAT_ACAV ORDER BY id_acav ASC").list();
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  13. #13
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Fench Voir le message
    Juste un truc en laissant tomber le mapping ...

    Pourquoi fait tu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		List listEtatACAV = new ArrayList();
    Je ferrais (et j'ai regardé dans d'autres codes), directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List listEtatACAV = session.createQuery("from ETAT_ACAV ORDER BY id_acav ASC").list();

    Oui disons que c'est pour le paramétrer au cas ou il y aurait des conditions.
    Pour le moment je veux afficher le contenu de la requête (List listEtatACAV = session.createQuery("from ETAT_ACAV ORDER BY id_acav ASC").list()ensuite, je pourrais toujours lui imposer des paramètres d'entrées.
    Car il y a une autre façon pour faire la requête:

    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
    32
    33
     
    		List listEtatACAV = new ArrayList();
    		String select ="";
    		String from = "";
    		String requeteHQL="";
    		try{
     
     
     select = "    SELECT ID_SUPPORT ,"
                        +" VALEUR ,"
                        +" LIBELLE_COURT ,"
                        +" MONTANT_ACAV_A , "
                        +" MONTANT_ACAV_P ,"
                        +" MONTANT_ACAV_ATTENTE , "
                        +" ID_ACAV_ATTENTE , "
                        +" ID_FLUX"
                        ;
      FROM = "    FROM  ACAV_ATTENTE "
     
         +" INNER JOIN MIF_SUPPORT ON ACAV_ATTENTE.ID_SUPPORT=MIF_SUPPORT.ID_SUPPORT"
     
         +" INNER JOIN VL ON ACAV_ATTENTE.ID_SUPPORT=VL.ID_SUPPORT"
     
         +" INNER JOIN ACAV_ACTIF ON ACAV_ATTENTE.ID_SUPPORT=ACAV_ACTIF.ID_SUPPORT   "
     
         +" INNER JOIN ACAV_passif ON ACAV_ATTENTE.ID_SUPPORT=ACAV_PASSIF.ID_SUPPORT   "
     
         +" INNER JOIN FLUX_ACAV_ATTENTE  ON ACAV_ATTENTE.ID_ACAV_ATTENTE=FLUX_ACAV_ATTENTE.ID_ACAV_ATTENTE"   
    ;
    			requeteHQL = select+from+" order by 1";	
    			Query query = session.createQuery(requeteHQL);
     
    			listEtatACAV = query.list();
    Voilà si je ne me trompe pas.

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Bon alors pour le moment ça n'avance pas des masses.
    J'ai un souci quand je compile.
    Voici mon code:
    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
     
    <?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="INTetatACAV.etatACAV.metier.entite" >
       <!--  Couche Hibernate des derniers etats en faisant appel à la vue -->
    	<class name="MIFetatACAV" table="ETAT_ACAV_Pk_view">
    		  <composite-id name="id_acav"  class="INTetatACAV.etatACAV.metier.entite.MIFetatACAVPk"  >  
     
     
     	    <key-many-to-one name="idacavattente" column="ID_ACAV_ATTENTE" class="INTetatACAV.etatACAV.metier.entite.MIFAcavAttente"  /> 	  
     	    <key-many-to-one name="idacavactif" column="ID_ACAV_ACTIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavActif"/>  
     	    <key-many-to-one name="idacavpassif" column="ID_ACAV_PASSIF" class="INTetatACAV.etatACAV.metier.entite.MIFAcavPassif"/> 
     
     
        </composite-id>
     
            <many-to-one insert="false" update="false" name="libellecourt" column="LIBELLE_COURT" class="INTgestiondonnee.produitsupport.metier.entite.MifProduitSupport"></many-to-one>  
            <many-to-one insert="false" update="false" name="valeur" column="VALEUR" class="INTetatACAV.etatACAV.metier.entite.MIFVL"></many-to-one>     
            <many-to-one insert="false" update="false" name="montantacava" column="MONTANT_ACAV_A" class="INTetatACAV.etatACAV.metier.entite.MIFAcavActif"></many-to-one>   
            <many-to-one insert="false" update="false" name="montantacavp" column="MONTANT_ACAV_P" class="INTetatACAV.etatACAV.metier.entite.MIFAcavPassif"></many-to-one>   
            <many-to-one insert="false" update="false" name="montantacavattente" column="MONTANT_ACAV_ATTENTE" class="INTetatACAV.etatACAV.metier.entite.MIFAcavAttente"></many-to-one>    
            <many-to-one insert="false" update="false" name="idacavattente" column="ID_ACAV_ATTENTE" class="INTetatACAV.etatACAV.metier.entite.MIFFluxAcav"></many-to-one>       
            <many-to-one insert="false" update="false" name="idflux" column="ID_FLUX" class="INTetatACAV.etatACAV.metier.entite.MIFFluxAcav"></many-to-one>                                 
     
    	</class>
     
    </hibernate-mapping>
    voici le code de ma vue :
    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
     
    CREATE OR REPLACE VIEW ETAT_ACAV_PK_VIEW
    (ID_SUPPORT, VALEUR, LIBELLE_COURT, MONTANT_ACAV_A, MONTANT_ACAV_P, 
     MONTANT_ACAV_ATTENTE, ID_ACAV_ATTENTE, ID_FLUX)
    AS 
    SELECT
                        ID_SUPPORT ,
                        VALEUR ,
                        LIBELLE_COURT ,
                        MONTANT_ACAV_A , 
                        MONTANT_ACAV_P ,
                        MONTANT_ACAV_ATTENTE , 
                        ID_ACAV_ATTENTE , 
                        ID_FLUX
         FROM      ACAV_ATTENTE 
     
     
         INNER JOIN MIF_SUPPORT ON ACAV_ATTENTE.ID_SUPPORT=MIF_SUPPORT.ID_SUPPORT
     
         INNER JOIN VL ON ACAV_ATTENTE.ID_SUPPORT=VL.ID_SUPPORT
     
         INNER JOIN ACAV_ACTIF ON ACAV_ATTENTE.ID_SUPPORT=ACAV_ACTIF.ID_SUPPORT   
     
         INNER JOIN ACAV_passif ON ACAV_ATTENTE.ID_SUPPORT=ACAV_PASSIF.ID_SUPPORT   
     
         INNER JOIN FLUX_ACAV_ATTENTE  ON ACAV_ATTENTE.ID_ACAV_ATTENTE=FLUX_ACAV_ATTENTE.ID_ACAV_ATTENTE
    /
    Et voici le message d'erreur qu'il me génère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    2009-01-02 11:08:41,485 [http-8080-1] DEBUG - [org.hibernate.util.JDBCExceptionReporter::] could not execute query [select mifetataca0_.ID_ACAV_ATTENTE as ID1_22_, mifetataca0_.ID_ACAV_ACTIF as ID2_22_, mifetataca0_.ID_ACAV_PASSIF as ID3_22_, mifetataca0_.LIBELLE_COURT as LIBELLE4_22_, mifetataca0_.VALEUR as VALEUR22_, mifetataca0_.MONTANT_ACAV_A as MONTANT6_22_, mifetataca0_.MONTANT_ACAV_P as MONTANT7_22_, mifetataca0_.MONTANT_ACAV_ATTENTE as MONTANT8_22_, mifetataca0_.ID_FLUX as ID9_22_ from ETAT_ACAV_Pk_view mifetataca0_]
    java.sql.SQLException: ORA-00904: "MIFETATACA0_"."ID_ACAV_PASSIF" : identificateur non valide
    Je me demande d'ou vient l'erreur. Je me demande si c'est au niveau de la vue.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 96
    Points
    96
    Par défaut
    Je ne vois pas de ID_ACAV_PASSIF dans la requete de ta vue.

  16. #16
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Nithril Voir le message
    Je ne vois pas de ID_ACAV_PASSIF dans la requete de ta vue.
    Salut,

    Oui, justement il ne devrait pas figurer dans la requête de la vue, enfin dans le select.

    Par contre j'y fait appel à ID_ACAV_PASSIF dans le "composite-id" que j'ai besoin pour définir la clé primaire.

  17. #17
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    J'ai modifié le fichier de mapping et il me retourne enfin des données mais le souci est qu'il semblerait qu'il ne me retourne 4 lignes de données identiques alors que j'ai 4 lignes différentes lorsque j'exécute la requête directement sur ma base de données en passant par TOAD.

    Voici la requête qui est exécuté par Hibernate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hibernate: select mifetataca0_.ID_SUPPORT as ID1_22_, mifetataca0_.ID_ACAV_ATTENTE as ID2_22_, mifetataca0_.ID_FLUX as ID3_22_, mifetataca0_.LIBELLE_COURT as LIBELLE4_22_, mifetataca0_.VALEUR as VALEUR22_, mifetataca0_.MONTANT_ACAV_A as MONTANT6_22_, mifetataca0_.MONTANT_ACAV_P as MONTANT7_22_, mifetataca0_.MONTANT_ACAV_ATTENTE as MONTANT8_22_ from ETAT_ACAV_Pk_view mifetataca0_
    Elle me sort une liste avec 4 fois les mêmes lignes
    Voici le log :
    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
    32
    33
    34
    35
    36
    37
    38
     
    Hibernate: select mifetataca0_.ID_SUPPORT as ID1_22_, mifetataca0_.ID_ACAV_ATTENTE as ID2_22_, mifetataca0_.ID_FLUX as ID3_22_, mifetataca0_.LIBELLE_COURT as LIBELLE4_22_, mifetataca0_.VALEUR as VALEUR22_, mifetataca0_.MONTANT_ACAV_A as MONTANT6_22_, mifetataca0_.MONTANT_ACAV_P as MONTANT7_22_, mifetataca0_.MONTANT_ACAV_ATTENTE as MONTANT8_22_ from ETAT_ACAV_Pk_view mifetataca0_
    2009-01-05 13:33:24,578 [http-8080-1] DEBUG - [org.hibernate.jdbc.AbstractBatcher::] preparing statement
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.jdbc.AbstractBatcher::] about to open ResultSet (open ResultSets: 0, globally: 0)
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] processing result set
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result set row: 0
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID1_22_
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID2_22_
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID3_22_
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result row: EntityKey[INTetatACAV.etatACAV.metier.entite.MIFetatACAV#component[mid,idacavattente,idflux]{idflux=1, mid=1, idacavattente=1}]
    2009-01-05 13:33:24,593 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] Initializing object from ResultSet: [INTetatACAV.etatACAV.metier.entite.MIFetatACAV#component[mid,idacavattente,idflux]{idflux=1, mid=1, idacavattente=1}]
    2009-01-05 13:33:24,609 [http-8080-1] DEBUG - [org.hibernate.persister.entity.AbstractEntityPersister::] Hydrating entity: [INTetatACAV.etatACAV.metier.entite.MIFetatACAV#component[mid,idacavattente,idflux]{idflux=1, mid=1, idacavattente=1}]
    2009-01-05 13:33:24,609 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning 'support1' as column: LIBELLE4_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '10' as column: VALEUR22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '4137435.45' as column: MONTANT6_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '123.0' as column: MONTANT7_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '456545.45' as column: MONTANT8_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID2_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1.0' as column: ID3_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result set row: 1
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID1_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID2_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID3_22_
    2009-01-05 13:33:24,625 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result row: EntityKey[INTetatACAV.etatACAV.metier.entite.MIFetatACAV#component[mid,idacavattente,idflux]{idflux=1, mid=1, idacavattente=1}]
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result set row: 2
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID1_22_
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID2_22_
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID3_22_
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result row: EntityKey[INTetatACAV.etatACAV.metier.entite.MIFetatACAV#component[mid,idacavattente,idflux]{idflux=1, mid=1, idacavattente=1}]
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result set row: 3
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID1_22_
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID2_22_
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.type.NullableType::] returning '1' as column: ID3_22_
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] result row: EntityKey[INTetatACAV.etatACAV.metier.entite.MIFetatACAV#component[mid,idacavattente,idflux]{idflux=1, mid=1, idacavattente=1}]
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.loader.Loader::] done processing result set (4 rows)
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.jdbc.AbstractBatcher::] about to close ResultSet (open ResultSets: 1, globally: 1)
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.jdbc.AbstractBatcher::] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    2009-01-05 13:33:24,640 [http-8080-1] DEBUG - [org.hibernate.jdbc.AbstractBatcher::] closing statement

    Voici ma requête de ma vue que j'exécute sous un client Oracle (TOAD):
    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
    32
    33
    34
    35
     
    CREATE OR REPLACE VIEW ETAT_ACAV_Pk_view (       
         ID_SUPPORT,
         VALEUR,
         LIBELLE_COURT,
         MONTANT_ACAV_A,
         MONTANT_ACAV_P,
         MONTANT_ACAV_ATTENTE,
         ID_ACAV_ATTENTE,
         ID_FLUX,      
         CONSTRAINT Pk_ETAT_ACAV_view PRIMARY KEY (ID_SUPPORT,ID_ACAV_ATTENTE,ID_FLUX) DISABLE NOVALIDATE),
         AS
         SELECT
                        ID_SUPPORT ,
                        ID_ACAV_ATTENTE ,
                        ID_FLUX,
                        LIBELLE_COURT ,
                        VALEUR ,
                        MONTANT_ACAV_A , 
                        MONTANT_ACAV_P ,
                        MONTANT_ACAV_ATTENTE , 
                        ID_ACAV_ATTENTE , 
                        ID_FLUX
         FROM      ACAV_ATTENTE 
     
     
         INNER JOIN MIF_SUPPORT ON ACAV_ATTENTE.ID_SUPPORT=MIF_SUPPORT.ID_SUPPORT
     
         INNER JOIN VL ON ACAV_ATTENTE.ID_SUPPORT=VL.ID_SUPPORT
     
         INNER JOIN ACAV_ACTIF ON ACAV_ATTENTE.ID_SUPPORT=ACAV_ACTIF.ID_SUPPORT   
     
         INNER JOIN ACAV_passif ON ACAV_ATTENTE.ID_SUPPORT=ACAV_PASSIF.ID_SUPPORT   
     
         INNER JOIN FLUX_ACAV_ATTENTE  ON ACAV_ATTENTE.ID_ACAV_ATTENTE=FLUX_ACAV_ATTENTE.ID_ACAV_ATTENTE
    Et voici ma class qui exécute la requête:
    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
     
    public class MifetatACAVManager {
     
    	public List rechercheEtatACAV(Long id_acav, Long numero, String support, Long vl, Double passif, Double actif, Double en_attente){
     
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		Transaction trx = session.beginTransaction();
    		List listEtatACAV = new ArrayList();
    		String select ="";
    		String from = "";
    		String requeteHQL="";
    		try{
     
    			listEtatACAV=session.createQuery("from MIFetatACAV ").list();
     
    			System.out.println("tete :"+listEtatACAV);
     
     
     
    		}catch (HibernateException he){
    			he.printStackTrace();
    			return null;
    		}catch (Exception e){
    			e.printStackTrace();
    			return null;
    		}finally{
    			session.close();
    		}
    		return listEtatACAV;	
    	}
    }
    Une petite idée d'où pourrait provenir l'erreur? Il me sort la première ligne 4 fois alors qu'il devrait y avoir 4 lignes de retourné et non pas 4 fois la première ligne. Merci.
    hmm Je pense que ça vient des données test de la base.
    vu que j'utilise un composite-id des champs : ID_SUPPORT, ID_ACAV_ATTENTE, ID_FLUX et que dans la base ils sont 4 fois à 1 Je suppose qu'il ne doit afficher que la première ligne ayant ces 3 ID = 1.
    Confirmation?

Discussions similaires

  1. problèmes de requêtes sur des vues
    Par krum dans le forum JPA
    Réponses: 0
    Dernier message: 23/06/2009, 10h48
  2. Petit problème de requête sur une arborescence.
    Par grandpa006 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/03/2008, 09h29
  3. [Lazarus] Problème de requête sur une base de données
    Par bubulemaster dans le forum Lazarus
    Réponses: 1
    Dernier message: 09/11/2007, 18h14
  4. Problème de grant sur une vue utilisant un db_link
    Par squallJ dans le forum Administration
    Réponses: 2
    Dernier message: 04/09/2007, 11h33
  5. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo