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 :

One to Many ne ramène que le 1er enregistrement [Mapping]


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut One to Many ne ramène que le 1er enregistrement
    Bonjour,
    j'avais posé une question bien compliquée vendredi. J'ai isolé mon problème.

    J'ai une relation One to Many entre un automate et ses date de connexions.

    Lorsque j'éxécute ma requête qui doit me ramener tous mes automates avec toutes leurs dates de connexions, ça me ramène bien les connexions du 1er automate puis uniquement la 1ère connexion des automates suivants... Problème de mapping, problème de HQL ? Au secours !

    Beans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class VueAutomateED implements java.io.Serializable {
     
    	private static final long serialVersionUID = -8933058761232072580L;
     
    	private Long id;
     
    	private String id_auto_complet;
     
     
    	/**
             * Liste des connexions
             */
    	private Set<ConnexionED> listConnexions = new HashSet<ConnexionED>();	//getters setters
    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
    public class ConnexionED implements java.io.Serializable {
     
    	private static final long serialVersionUID = -9105000665015561454L;
    	/**
             * id
             */
        private Long id;
     
        /**
         * Automate concerné
         */
        private VueAutomateED automateED;
     
        /**
         * Connexion
         */
        private Date connexion; //getters setters
    Mapping :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <hibernate-mapping>
    	<class name="com.mycompany.entite.ConnexionED"
    		table="HISTORIQUE_CONNEXIONS">
    		<id name="id" type="long">
    			<column name="ID" precision="22" scale="0" />
    			<generator class="sequence">
    				<param name="sequence">SEQ_HISTORIQUE_CONNEXIONS</param>
    			</generator>
    		</id>
             <many-to-one name="automateED" class="com.mycompany.entite.VueAutomateED" fetch="select">
                <column name="AUTOMATE_ID" not-null="true" />
            </many-to-one>
    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
    <hibernate-mapping>
        <class name="com.mycompany.entite.VueAutomateED" table="VUEAUTOMATEQS">
            <id name="id" type="long">
                <column name="ID" precision="22" scale="0" />
                <generator class="sequence">
                    <param name="sequence">SEQ_AUTOMATE</param>
            	</generator>
            </id>
     
             <property name="id_auto_complet" type="string">
       	        <column name="ID_AUTO_COMPLET" length="15" />
           	</property>
     
     
             <set name="listConnexions" table="HISTORIQUE_CONNEXIONS">
                <key column="AUTOMATE_ID"/>
                <one-to-many class="com.mycompany.entite.ConnexionED" />
            </set>
    et enfin la requête HQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			from VueAutomateED a		
    			left join fetch a.listConnexions con
    			where (a.id between 30841 and 30847)
    			order by a.id
    Toute piste serait précieuse, merci d'avance !

  2. #2
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Salut,

    Tu pourrais exécuter la requête sur ton SGBD.

    Quel résultat as-tu ?

  3. #3
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    J'ai 10 lignes, correspondant aux 10 connexions réparties sur mes 7 automates.

  4. #4
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    10 connexions sur 7 automates ?
    4 connexions sur le premier et une sur les autres peut etre ?

    - Je n'ai jamais utilisé la mapping XML. J'utilise les annotations.
    Quand j'ai eu des problèmes de ce type, c'etait le plus souvent le mapping avec la propriété concernée.

    - De plus, j'ai pas compris pourquoi tu as mis le prédicat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a.id between 30841 and 30847
    Je pense que c'est pas la peine puisque tu veux toutes les connexions de tous les automates...

    Si tu testais sans ?

    - Pourquoi le left join ?

  5. #5
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Après 2 jours à s'arracher les cheveux sur Hibernate et à isoler le problème, nous avons conclu que tout était bon coté mapping, BDD et hibernate.

    Ce qui posait souci c'était un bon de conf de Spring Batch

    il fallait supprimer cette ligne :
    <property name="useStatelessSession" value="false" />

    Ca m'oblige à fetcher dans la requête tous les objets dont j'ai besoin dans mon batch, le lazy="false" ne fonctionne plus mais tout est ramené en une seule requête, c'est ce que je voulais !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. N'utiliser que le 1er enregistrement?
    Par kouette dans le forum PL/SQL
    Réponses: 15
    Dernier message: 25/05/2011, 08h34
  2. comment ne sélectionner que le 1er enregistrement d'un groupe ?
    Par skywaukers dans le forum Langage SQL
    Réponses: 7
    Dernier message: 18/12/2007, 10h39
  3. [hibernate] relation one-to-many avec plusieurs clés
    Par seb_fou dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/03/2006, 14h47
  4. Aff d'une variable je ne recupere que le 1er mot
    Par mitchb dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/06/2005, 17h06
  5. [EJB2.1 Entity] [CMR] Relation One to Many
    Par hamed dans le forum Java EE
    Réponses: 2
    Dernier message: 31/12/2003, 14h26

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