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 avec ResultSet


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Problème avec ResultSet
    Bonjour,

    Je suis sur ce problème depuis 2 jours, j'ai l'impression d'avoir chercher partout. Je ne suis pas du genre à demander de l'aide sur un forum mais là je suis à la limite de jeter mon ordi par terre

    Je suis sous hibernate2 j'ai utlisé le tuto suivant : http://defaut.developpez.com/tutorie...pse/hibernate/
    (Vous allez dire utilise hibernate3 mais j'ai un souci aussi que je pige encore moins alors je suis revenue à hibernate2)

    Maintenant j'aimerais faire une requête SQL comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction();
     
    Query q = session.createSQLQuery("SELECT * FROM ECOLE where id_ecole='1'", "listEcole", Ecole.class);
    System.out.println(q.list());
    tx.commit();
    HibernateUtil.closeSession();
    Et il me sort cette erreur :
    org.postgresql.util.PSQLException: Le nom de colonne id_ecole0_ n'a pas été trouvé dans ce ResultSet.

    D'ou vient ce 0_ qu'il rajoute? je commence hibernate et je pense comprendre à peu près comment ça marche mais là je suis perdue!

    Si ça peut aider mes fichier xml:

    fichier de configuration
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
     
    <hibernate-configuration>
    	<session-factory>
    		<!-- local connection properties -->
    		<property name="hibernate.connection.url">
    			jdbc:postgresql://127.0.0.1/postgres
    		</property>
    		<property name="hibernate.connection.driver_class">
    			org.postgresql.Driver
    		</property>
    		<property name="hibernate.connection.username">postgres</property>
    		<property name="hibernate.connection.password">contacto</property>
    		<!-- property name="hibernate.connection.pool_size"></property -->
    		<!-- dialect for PostgreSQL -->
    		<property name="dialect">
    			net.sf.hibernate.dialect.PostgreSQLDialect
    		</property>
    		<property name="hibernate.show_sql">true</property>
    		<property name="hibernate.use_outer_join">true</property>
    		<property name="hibernate.transaction.factory_class">
    			net.sf.hibernate.transaction.JDBCTransactionFactory
    		</property>
    		<property name="jta.UserTransaction">
    			java:comp/UserTransaction
    		</property>
    		<mapping resource="UtiNews.hbm" />
    		<mapping resource="Ecole.hbm" />
    		<mapping resource="News.hbm" />
    		<mapping resource="UtiEtu.hbm" />
    		<mapping resource="Contexte.hbm" />
    		<mapping resource="Contact.hbm" />
    		<mapping resource="UtiExp.hbm" />
    		<mapping resource="Experience.hbm" />
    		<mapping resource="Societe.hbm" />
    		<mapping resource="Utilisateur.hbm" />
    		<mapping resource="ContactTemp.hbm" />
    		<mapping resource="Etude.hbm" />
    	</session-factory>
    </hibernate-configuration>
    fichier de mapping de Ecole :
    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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
     
    <hibernate-mapping package="com.hibernate">
    	<class name="Ecole" table="ecole">
    		<id
    			column="id_ecole"
    			name="IdEcole"
    			type="integer"
    		>
    			<generator class="vm" />
    		</id>
    		<property
    			column="pays"
    			length="150"
    			name="Pays"
    			not-null="true"
    			type="string"
    		 />
    		<property
    			column="ville"
    			length="150"
    			name="Ville"
    			not-null="true"
    			type="string"
    		 />
    		<set inverse="true" name="EtudeSet">
    			<key column="fk_ecole" />
    			<one-to-many class="Etude" />
    		</set>
    	</class>
    </hibernate-mapping>
    Merci d'avance

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Pourquoi utilises-tu une requête native plutôt que du HQL ?
    Dans la mesure où tu mappes toute une entité, le plus simple serait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    createQuery("from Ecole where idEcole=?1").setParameter(1, value).getResultList();
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier Avatar de POKOU
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 121
    Points : 101
    Points
    101
    Par défaut
    Il faut bien comprendre la persistence : quand met on les entitées, sur quoi, et pourquoi ...
    moi aussi je rame depuis 2 ans pour afficher un article extrait d'un iterator
    # Do NOT simply read the instructions in here without understanding
    # what they do. They're here only as hints or reminders. If you are unsure
    # consult the online docs. You have been warned.

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Déjà merci pour votre réponse.

    @OButterlin, je préfère le SQL parce-que je ne suis pas seule à travailler dessus et on a déjà pas mal de nouveaux outils à apprendre alors je voulais éviter d'apprendre en plus le HQL.

    De plus, ici c'est une requête simple mais on aura des requêtes de recherche à faire et on est vraiment plus calé en SQL mes collègues et moi.

    @POKOU
    2 ans? Bon moi j'dois rendre ce projet en février donc je crois que je ne me prendrais pas la tête pendant 2 ans ^^
    J'ai un peu de mal à comprendre ton principe de persistence, enfin zut de crotte quoi je veux juste faire un select pourri dans hibernate. (Surtout que mon select pourri marche très bien sur hibernate 3 mais j'ai un autre problème encore moins compréhensible alors je suis repassée au 2)

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    c'est un peu un non sens, soit vous utilisez SQL via jdbc, soit vous utilisez HQL via Hibernate...
    mais vouloir faire du sql avec Hibernate n'a que peu d'intérêt...

    D'un point de vue personnel, l'usage d'un ORM ou de JPA est intéressant pour gérer le modèle métier, mais pour faire de la requête de sélection ou d'extraction, il est souvent plus performant et simple de gérer des requêtes sql natives.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    A partir du moment ou hibernate permet de faire du SQL je ne vois pas en quoi c'est hyper grave de faire du SQL. Après je n'ai pas beaucoup d'expérience la dedans alors je ne me permettrais pas d'entrer dans ce débat

    Je vais poster mon problème d'hibernate3 puisque là il ne s'agit pas d'un problème SQL.

    J'essaie de faire ça :

    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
     
    Session session = SessionManager.currentSession();
     
    Transaction tx = session.beginTransaction();
     
    Utilisateur samuel = new Utilisateur();
    samuel.setNom("Philipps");
    samuel.setPrenom("Samuel");
    samuel.setCivilite("Mr");
    samuel.setEmail("samuel.philips@caca.fr");
    samuel.setMdp("lalal");
    samuel.setDatenaissance("04/08/89");
    Date d = new Date();
    samuel.setDateinscription(d);
    samuel.setNbreference((0);
    samuel.setChangementnews(false);
    samuel.setFkEtat(new Etat(1));
    samuel.setFkStatut(new Statut(2));
     
     
    UtilisateurDAO utilisateur = new UtilisateurDAO();
    try{
    	utilisateur.save(samuel,session);
    }catch(Exception e){
    		System.out.println(e.getMessage());
    }
    tx.commit();
     
    SessionManager.closeSession();
    Et j'ai l'erreur suivante :

    Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into utilisateur (adresse, permis, ville, dateinscription, photo, nom, prenom, mdp, codepostal, email, description, pays, civilite, changementnews, telephone, nbreference, datenaissance, fk_statut, fk_etat, id_user) values (NULL, NULL, NULL, '2012-01-17 +01:00:00', NULL, 'Philipps', 'Samuel', 'lalal', NULL, 'samuel.philips@caca.fr', NULL, NULL, 'Mr', '0', NULL, '0', '04/08/89', '<stream of 266 bytes>', '<stream of 262 bytes>', '29') a été annulé. Appeler getNextException pour en connaître la cause.

    Je crois comprendre qu'il n'insère pas correctement les clés étrangères, il entre l'objet au lieu d'entrer la clé étrangère mais c'est hibernate qui a tout gérer à ma place et qui de demande l'objet Etat et Statut dans les sets.

    Je ne vois pas trop quoi modifier...
    (Je peux dire que ça, ça marche parfaitement sur hibernate2 en plus )

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Là c'est un autre problème qu'au début de ton post...
    Peux-tu afficher l'intégralité de l'erreur ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    AHAHAHAHAAH!

    C'est bon grâce à mon brillant chef de projet!!

    Le mapping de la classe était mal faite il n'avait pas considéré les clés étrangères comme des many-to-one dans le fichier de mapping.

    Tant pis pour hibernate2 et merci encore à tous

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Il faut arrêter de répandre des clichés :

    Si réécrire des requêtes en SQL peut apporter des augmentations notables de performance pure, cela ne concerne en général qu'un % limité des queries d'une grosse application si elle est bien structurée, (ici moins de 5%, ce qui est assez loin de l'acceptation courante de "souvent") et en général ce sont des queries où par exemple le nombre de JOIN est important : jamais de simples queries qui retournent une seule entité avec un critère WHERE trivial comme ci-dessus, ou des queries qui ne tirent aucun bénéfice des caches, queries qui sont utilisés dans le cadre de traitements qui par définition n'ont rien à faire dans la partie gérée par ORM : les traitements batch sont l'exemple type.

    En conséquence, ce genre d'optimisation (vu la complexité des queries concernés…) est rarement à la porté d'un débutant et, aussi, les optimisations les plus performantes passent par la réécriture des queries CRUD (en JPA, ceux que l'on définit via @SQLInsert, @SQLDelete, @SQLUpdate, …), la définition de VIEW et l'écriture de procédures stockées : travail que l'on pourrait donc qualifier de multi-disciplinaire, relativement "RDBMS-dependant" et, tout sauf trivial.

    D'autant plus que dans le cadre d'applications utilisant des caches d'objets les conséquences sur cette cache doivent être examinées attentivement sous peine de défaire une grosse partie de l'optimisation ou d'introduire des bugs subtiles et difficiles à diagnostiquer de cohérence des données affichées (pensez "Cloud").

    Et finalement, ne jamais perdre de vue qu'une optimisation prématurée apporte son propre lot d'inconvénients dans le cycle de développement.

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Il faut arrêter de répandre des clichés :
    Ça n'a rien à voir avec des clichés.

    Lorsqu'une ihm utilise 5 colonnes d'une table plutôt que 100, lorsque l'usage d'un indexes particuliers peut réduire les temps de réponse de manière significative, le tout en remote... ce sont des cas fréquents, peut-être pas dans le type d'applications que tu développes...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Ça n'a rien à voir avec des clichés.

    Lorsqu'une ihm utilise 5 colonnes d'une table plutôt que 100, lorsque l'usage d'un indexes particuliers peut réduire les temps de réponse de manière significative, le tout en remote... ce sont des cas fréquents, peut-être pas dans le type d'applications que tu développes...
    Ce n'est pas une question de type d'applications mais de bonne structuration et modélisation OO : en général les faiblesses à ces niveaux sont les causes premières de nombreuses difficultés dans la vie des applications basées sur des ORMs.

    Même s'il est évidemment plus difficile de plaquer une bonne modélisation OO sur un modèle "legacy" (ce que sous-entend une table de 100 colonnes) que d'avoir toute liberté dans un projet "from scratch" (un objet de 100 propriétés soulève tout de suite question…), il n'est pas impossible de réduire ce genre de difficultés au minimum.

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Même s'il est évidemment plus difficile de plaquer une bonne modélisation OO sur un modèle "legacy" (ce que sous-entend une table de 100 colonnes) que d'avoir toute liberté dans un projet "from scratch" (un objet de 100 propriétés soulève tout de suite question…), il n'est pas impossible de réduire ce genre de difficultés au minimum.
    effectivement, c'est bien le cas, et il est fréquent...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problème avec ResultSet
    Par rabDev dans le forum Général Java
    Réponses: 6
    Dernier message: 15/11/2013, 17h02
  2. Réponses: 5
    Dernier message: 29/05/2008, 10h05
  3. bdd java problème avec ResultSet
    Par moon96 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/04/2008, 23h06
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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