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 :

hibernate 3 et relation many-to-one


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 47
    Points : 50
    Points
    50
    Par défaut hibernate 3 et relation many-to-one
    bonjour,
    voilà dans ma croisade vers une meilleur compréhension d'hibernate 3 et de ses subtilités je teste les différents types de relations et là je ne comprend plus rien du tout sur la relation many-to-one, tous semble apparemment bien configuré et pourtant lors des selects l'objet père n'est pas chargé

    mon environnement:
    jre 1.6
    hibernate 3
    hsqldb 1.8 en mode fichier

    mes tables et les données:
    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
     
    CREATE TABLE COMPTE (
           ID_COMPTE integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
           ID_UTI integer,
           NOM_COMPTE varchar(255),
           NOM_BANQUE varchar(255),
           SOLDE_INITIAL double)
     
    ALTER TABLE COMPTE ADD CONSTRAINT UTI_COMPTE FOREIGN KEY (ID_UTI) REFERENCES UTILISATEUR (ID_UTI)
     
    CREATE TABLE UTILISATEUR (
          ID_UTI integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
          NOM_UTI varchar(255),
          PRENOM_UTI varchar(255))
     
    INSERT INTO COMPTE VALUES(1,1,'nom compte 1','nom Banque 1',0.36251522800319114E0)
    INSERT INTO COMPTE VALUES(2,1,'nom compte 2','nom Banque 2',0.5464440788761791E0)
    INSERT INTO UTILISATEUR VALUES(1,'nom','prenom')
    mes fichiers hibernate:
    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
     
    <?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="appli">
    	<class name="Compte" table="COMPTE">
    		<!-- Identifiant -->
    		<id name="idCompte" column="ID_COMPTE" type="int">
                <generator class="increment"/>
            </id>
     
    		<property name="nomCompte" column="NOM_COMPTE" type="string"/>
    		<property name="nomBanque" column="NOM_BANQUE" type="string"/>
    		<property name="soldeInitial" column="SOLDE_INITIAL" type="double"/>
     
    		<!-- Relation One To One to Utilisateur -->
    		<many-to-one column="ID_UTI" name="utilisateur" class="Utilisateur"/> 
    	</class>
    </hibernate-mapping>
     
    <?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="appli">
    	<class name="Utilisateur" table="UTILISATEUR">
    		<id name="idUtilisateur" column="ID_UTI" type="int">
                <generator class="increment"/>
            </id>
     
    		<property name="nomUtilisateur" column="NOM_UTI" type="string"/>
    		<property name="prenomUtilisateur" column="PRENOM_UTI" type="string"/>
     
    		<!-- Relation One to Many to COMPTE -->
    		<bag name="comptes" cascade="persist,save-update" inverse="false">
    			<key column="ID_UTI"/>
    			<one-to-many class="Compte"/>
    		</bag>
    	</class>
    </hibernate-mapping>
    mes classes:
    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
     
    public class Compte {
    	private int idCompte;
    	private String nomCompte;
    	private String nomBanque;
    	private double soldeInitial;
    	private Utilisateur utilisateur;
            ------}
     
    public class Utilisateur {
    	private int idUtilisateur;
    	private String nomUtilisateur;
    	private String prenomUtilisateur;
    	private List<Compte> comptes;
            -----}
    et enfin (ouf) mon main de test
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    public class Test {
    	public static Session session;
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		initialiseSession();
    		traitementHibernateSelect();
    		terminateSession();
    		}
     
     
    	private static void terminateSession() {
    		System.out.println("-- begin terminate session --");
     
    		session.close();
    		session.getSessionFactory().close();
     
    		System.out.println("-- end terminate session --");
    		}
     
     
    	private static void initialiseSession() {
    		System.out.println("-- begin init session --");
     
    		Configuration configuration = new Configuration()
    			.addResource("appli/Compte.hbm.xml")
    			.addResource("appli/Utilisateur.hbm.xml")
    			.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect")
    			.setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver")
    			.setProperty("hibernate.connection.url", "jdbc:hsqldb:file:G:\\java\\tests\\testDB2\\MyDB2.userDB2;shutdown=true")
    			.setProperty("hibernate.connection.username", "sa")
    			.setProperty("hibernate.connection.password", "")
    			.setProperty("hibernate.connection.pool_size", "1")
    			.setProperty("hibernate.show_sql", "true")
    			.setProperty("hibernate.hbm2ddl.auto", "validate");
     
    		SessionFactory sessionFactory = configuration.buildSessionFactory();
    		session = sessionFactory.openSession();
     
    		System.out.println("-- end init Session --");
    		}
     
     
    	private static void traitementHibernateSelect() {
    		System.out.println("-- begin select tables --");
     
    		if(!session.isOpen()){
    			session = session.getSessionFactory().openSession();
    			}
    		session.beginTransaction();
     
    		List<Utilisateur> utilisateurs = session.createQuery("from Utilisateur").list();
    		System.out.println("nb utilisateurs: " + utilisateurs.size());
     
    		Iterator<Utilisateur>iUtilisateurs = utilisateurs.iterator();
    		while(iUtilisateurs.hasNext()){
    			System.out.println("-----------------------");
    			Utilisateur uti = iUtilisateurs.next();
    			System.out.println(uti);
     
    			Iterator<Compte>iComptes = uti.getComptes().iterator();
    			while(iComptes.hasNext()){
    				Compte compte = iComptes.next();
     
    				System.out.println(compte);
    				}
    			}
     
    		session.close();
     
    		System.out.println("-- end Select tables --");
    		}
    }
    avec cette configuration la liste des comptes est bien initialisée mais pas l'objet utilisateur dans l'objet compte.
    pourtant ce cas est on ne peut plus académique et cela devrait marcher...
    si quelqu'un à une idée merci d'avance

    Edit : un select sur la table compte donne le même résulta et dans se cas en regardant les logs hibernate il n'y a pas du tout de requete sur le champ ID_UTI
    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
    23:00:56,660 DEBUG QueryTranslatorImpl:177 - HQL: from appli.Compte
    23:00:56,663 DEBUG QueryTranslatorImpl:178 - SQL: select compte0_.ID_COMPTE as ID1_, compte0_.NOM_COMPTE as NOM2_0_, compte0_.NOM_BANQUE as NOM3_0_, compte0_.SOLDE_INITIAL as SOLDE4_0_ from COMPTE compte0_
    23:00:56,669 DEBUG AbstractBatcher:258 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    23:00:56,671 DEBUG SQL:292 - select compte0_.ID_COMPTE as ID1_, compte0_.NOM_COMPTE as NOM2_0_, compte0_.NOM_BANQUE as NOM3_0_, compte0_.SOLDE_INITIAL as SOLDE4_0_ from COMPTE compte0_
    Hibernate: select compte0_.ID_COMPTE as ID1_, compte0_.NOM_COMPTE as NOM2_0_, compte0_.NOM_BANQUE as NOM3_0_, compte0_.SOLDE_INITIAL as SOLDE4_0_ from COMPTE compte0_
    23:00:56,673 DEBUG AbstractBatcher:343 - preparing statement
    23:00:56,702 DEBUG AbstractBatcher:274 - about to open ResultSet (open ResultSets: 0, globally: 0)
    23:00:56,705 DEBUG Loader:377 - processing result set
    23:00:56,706 DEBUG Loader:382 - result set row: 0
    23:00:56,710 DEBUG IntegerType:86 - returning '1' as column: ID1_
    23:00:56,715 DEBUG Loader:719 - result row: EntityKey[appli.Compte#1]
    23:00:56,717 DEBUG Loader:864 - Initializing object from ResultSet: [appli.Compte#1]
    23:00:56,725 DEBUG BasicEntityPersister:1625 - Hydrating entity: [appli.Compte#1]
    23:00:56,727 DEBUG StringType:86 - returning 'nom compte 1' as column: NOM2_0_
    23:00:56,729 DEBUG StringType:86 - returning 'nom Banque 1' as column: NOM3_0_
    23:00:56,731 DEBUG DoubleType:86 - returning '0.36251522800319114' as column: SOLDE4_0_
    23:00:56,734 DEBUG Loader:382 - result set row: 1
    23:00:56,735 DEBUG IntegerType:86 - returning '2' as column: ID1_
    23:00:56,737 DEBUG Loader:719 - result row: EntityKey[appli.Compte#2]
    23:00:56,740 DEBUG Loader:864 - Initializing object from ResultSet: [appli.Compte#2]
    23:00:56,741 DEBUG BasicEntityPersister:1625 - Hydrating entity: [appli.Compte#2]
    23:00:56,743 DEBUG StringType:86 - returning 'nom compte 2' as column: NOM2_0_
    23:00:56,745 DEBUG StringType:86 - returning 'nom Banque 2' as column: NOM3_0_
    23:00:56,747 DEBUG DoubleType:86 - returning '0.5464440788761791' as column: SOLDE4_0_
    23:00:56,749 DEBUG Loader:399 - done processing result set (2 rows)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 47
    Points : 50
    Points
    50
    Par défaut
    bon en fait cela marche très bien. j'avoue ne pas savoir pourquoi...

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

Discussions similaires

  1. [Spring / Hibernate / JPA] Relation Many to One
    Par Yoru17 dans le forum Hibernate
    Réponses: 0
    Dernier message: 25/06/2015, 11h35
  2. Hibernate relation many-to-one
    Par bricecol dans le forum Hibernate
    Réponses: 4
    Dernier message: 09/03/2011, 09h57
  3. [Hibernate 3] Relation many-to-one
    Par LordBob dans le forum Hibernate
    Réponses: 13
    Dernier message: 06/11/2008, 09h27
  4. Relation Many-to-One dans une application JSF
    Par KooKoolen dans le forum JSF
    Réponses: 1
    Dernier message: 27/12/2006, 14h13
  5. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 13h08

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