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] select possible, insert ou update impossible


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Hibernate] select possible, insert ou update impossible
    Bonjour, je développe actuellement une appli web j2ee à l'aide de struts et hibernate. J'utilise éclipse, mysql et tomcat 5. J'arrive très bien à lire ce que ma bd contient, mais impossible de modifier ou de créer un enregistrement dans une table.

    J'utilise un pattern DAO, dont voici le 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
     
    public class HibernateFilmDAO implements FilmDAO {
     
    	public void insertFilmDAO (Film film){
    		Session session = HibernateDAOFactory.creerConnexion();
    		try {
    			session.save(film);
    			session.flush();
    		} catch (HibernateException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				HibernateUtil.closeSession();
    			} catch (HibernateException e1) {
    				e1.printStackTrace();
    			}
    		}
    	}
     
            public List listFilmDAO () {
    		Session session = HibernateDAOFactory.creerConnexion();
    		Query query = null;
    		try {
    			query = session.createQuery("from com.starm.hibernate.metier.Film film order by film.id");
    			List list = query.list();
    			Film film;
    			for (int i = 0; i<list.size(); i++) {
    				film = (Film) list.get(i);
    				Hibernate.initialize( film.getFilmActeurs() );
    				Hibernate.initialize( film.getGenres() );
    			}
    			return list;
    		} catch (HibernateException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				HibernateUtil.closeSession();
    			} catch (HibernateException e1) {
    				e1.printStackTrace();
    			}
    		}			
    		return null;
    	}
            .....
    }
    Lorsque j'appelle la fonction listFilmDAO, il me trouve bien tous les enregistrements de la table. Par contre lorsque j'appelle insert sur un objet de type Film non null et non vide, il lance bien la requete SQL INSERT mais celle ci n'a aucun effet. Je vois qu'il lance la requete SQL car sous éclipse je vois les commandes SQL lancées à l'aide du plugin SYSDEO (enfin je crois que c grace a ce plugin).
    Voici la commande qu'eclipse reconnait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hibernate: insert into film (nom, datesortie, lien, chemin, fichier, extension, note, id) values (?, ?, ?, ?, ?, ?, ?, ?)
    Je ne sais pas si la commande est normale (Les ? sont normaux ou est ce parce qu'il les considèers comme null ???)
    Bref je ne sais pas trop ce qui se passe réellement au niveau d'hibernate, mais en tout cas lorsque je veux lire un champ de l'objet Film que je passe en paramètre de la fonction InsertFilmDAO, je vois les champs rempli.

    Pour vous aider, voici les conf d'hibernate :
    Hibernate.cfg.xml :
    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
     
    <hibernate-configuration>
    	<session-factory>
     
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="connection.username">starm</property>
    		<property name="connection.password">******</property> 
    		<property name="connection.url">jdbc:mysql://localhost:3306/dvdtek</property>
            <property name="show_sql">true</property>
     
    		<mapping resource="com/starm/hibernate/Acteur.hbm.xml" />
    		<mapping resource="com/starm/hibernate/Association.hbm.xml" />
    		<mapping resource="com/starm/hibernate/Film.hbm.xml" />
    		<mapping resource="com/starm/hibernate/FilmActeur.hbm.xml" />
    		<mapping resource="com/starm/hibernate/Genre.hbm.xml" />
    		<mapping resource="com/starm/hibernate/Player.hbm.xml" />
    		<mapping resource="com/starm/hibernate/User.hbm.xml" />
    		<mapping resource="com/starm/hibernate/UserPlayer.hbm.xml" />
     
    	</session-factory>
    </hibernate-configuration>
    Film.hbm.xml :
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    <hibernate-mapping>
    <!-- 
        Created by the Middlegen Hibernate plugin 2.2
        http://boss.bekk.no/boss/middlegen/
        http://www.hibernate.org/
    -->
    <class 
        name="com.starm.hibernate.metier.Film" 
        table="film"
        lazy="false"
    >
        <id
            name="id"
            type="java.lang.Integer"
            column="id"
        >
            <generator class="increment" />
        </id>
        <property
            name="nom"
            type="java.lang.String"
            column="nom"
            length="45"
        />
        <property
            name="dateSortie"
            type="java.sql.Timestamp"
            column="datesortie"
            length="19"
        />
        <property
            name="lien"
            type="java.lang.String"
            column="lien"
            length="80"
        />
        <property
            name="chemin"
            type="java.lang.String"
            column="chemin"
            length="80"
        />
        <property
            name="fichier"
            type="java.lang.String"
            column="fichier"
            length="45"
        />
        <property
            name="extension"
            type="java.lang.String"
            column="extension"
            length="10"
        />
        <property
            name="note"
            type="java.lang.Integer"
            column="note"
            length="10"
        />
        <!-- Associations -->
        <!-- bi-directional one-to-many association to FilmActeur -->
        <set
            name="filmActeurs"
            lazy="true"
            inverse="true"
    		cascade="all"
        >
            <key>
                <column name="idFilm" />
            </key>
     
            <one-to-many 
                class="com.starm.hibernate.metier.FilmActeur"
            />
        </set>
        <!-- bi-directional one-to-many association to Genre -->
        <set
            name="genres"
            lazy="true"
            inverse="true"
    		cascade="all"
        >
            <key>
                <column name="idFilm" />
            </key>
     
            <one-to-many 
                class="com.starm.hibernate.metier.Genre"
            />
        </set>
    </class>
    </hibernate-mapping>
    Si vous pouvez me fournir une explication de pourquoi ce fonctionne en lecture mais pas en écriture ce serait super.

    Merci d'avance.

    Starm.

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Il te renvoit une exception ?
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Non rien du tout, il fait comme si tout fonctionnait normalement et continue de faire tourner l'appli. Si y avait nu message d'erreur j'aurais au moins une piste pour trouver l'erreur, mais la meme pas ...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Je pense a un truc, les transactions sont elles gérées automatiquement par Hibernate ? Parce que dans mes DAO je n'implémente pas du tout de commit pour lui signaler de modifier la base. Le problème peut il venir de la gestion des transactions ?

  5. #5
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Ben voila ton probleme, tu dois toujours recuperer une transaction et faire un commit apres. Ou alors utiliser spring pour t'eviter de le faire.
    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
     
    SessionFactory sessions;
    List fooList;
    Bar bar;
    ....
    Session s = sessions.openSession();
     
    Transaction tx = null;
    try {
        tx = s.beginTransaction();
     
        fooList = s.find(
        	"select foo from eg.Foo foo where foo.Date = current date"
            //utilisation de la fonction date de DB2
        );
        bar = (Bar) s.save(Bar.class);
     
        tx.commit();
    }
    catch (Exception e) {
        if (tx!=null) tx.rollback();
        s.close();
        throw e;
    }
    s.disconnect();
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Effectivement une fois la transaction implémentée ca met bien à jour la base

    Merci beaucoup de ton aide Zekey.

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

Discussions similaires

  1. [MySQL] Update puis Select puis Insert
    Par Devilju69 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/05/2014, 12h47
  2. [MySQL] SELECT, INSERT et UPDATE sur un très grand nombre de lignes pour faire un classement
    Par sagat06 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/04/2014, 18h52
  3. Réponses: 2
    Dernier message: 02/07/2008, 02h26
  4. INSERT qui rend une selection, possible ?
    Par bibile dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/08/2007, 08h56
  5. [Débutant][PS] modifier un insert en update
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/05/2004, 16h33

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