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 lecture fantôme


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut problème de lecture fantôme
    Bonjour,

    Je travaille sur un projet (en JSF) qui utilise comme vous l'aurez compris Hibernate (3.3.2GA) et une base de données, en l'occurrence Oracle 9i.
    J'ai dans le back office de l'application un système de filtre qui me permet de restreindre les données affichées dans le tableau qui est affiché juste en dessous.
    Ce tableau me permet de rentrer en modification sur mes données. Jusque là rien de bien extraordinaire me direz-vous.
    Le problème est que lorsque je change la valeur d'une propriété de mon objet et que je fais la mise à jour dans le base de données. Je retourne sur la page avec le tableau est là lorsque je refiltre les données, j'ai soit la données à jour (tel qu'elle est dans la base) soit une version antérieur. Ce qui est bizarre c'est que d'une part ce n'est pas constant et d'autre part en affichant les requêtes je ne constate pas de différence.

    Au niveau de ma configuration j'ai ce fichier 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
    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
     
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
     
            <!-- Oracle Settings  com.p6spy.engine.spy.P6SpyDriver-->
            <property name="hibernate.connection.datasource">java:comp/env/jdbc/WebformDS</property>
            <property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
            <!-- JDBC connection pool (use the built-in)-->
            <property name="hibernate.jdbc.batch_size">25</property>
     
     
            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>
     
            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">false</property>
            <property name="use_sql_comments">false</property>
     
            <!-- Enable tables' auto creation
     
            <property name="hibernate.generate_statistics">true</property>
            <property name="hibernate.cache.provider_class">
                org.hibernate.cache.SingletonEhCacheProvider</property>
            <property name="hibernate.cache.provider_configuration">
                /ehcache.cfg.xml</property>-->
     
            <property name="hibernate.cache.use_minimal_puts">false</property>
            <property name="hibernate.cache.use_query_cache">false</property>
            <property name="hibernate.cache.use_second_level_cache">false</property>
            <property name="hibernate.cache.use_structured_entries">false</property>
     
            <property name="hibernate.hbm2ddl.auto">validate</property>
     
            <mapping resource="my/project/webform/commons/entities/hbm/Language.hbm.xml" />
            <mapping
                resource="my/project/webform/commons/entities/hbm/Translation.hbm.xml" />
            <mapping resource="my/project/webform/commons/entities/hbm/InterAble.hbm.xml" />
            <mapping
                resource="my/project/webform/commons/entities/hbm/OtherInterlocutor.hbm.xml" />
            <mapping resource="my/project/webform/commons/entities/hbm/Request.hbm.xml" />
            <mapping resource="my/project/webform/commons/entities/hbm/State.hbm.xml" />
            <mapping resource="my/project/webform/commons/entities/hbm/StatArea.hbm.xml" />
     
            <mapping
                resource="my/project/webform/inter/entities/hbm/InterlocutorType.hbm.xml" />
            <mapping resource="my/project/webform/inter/entities/hbm/Interlocutor.hbm.xml" />
            <mapping resource="my/project/webform/inter/entities/hbm/Module.hbm.xml" />
            <mapping resource="my/project/webform/inter/entities/hbm/Classe.hbm.xml" />
     
            <mapping resource="my/project/webform/tel1/entities/hbm/Document.hbm.xml" />
     
        </session-factory>
    </hibernate-configuration>
    La connexion à la base de données est gérée au niveau d'une datasource déclarée avec un niveau d'isolation à 2.

    J'ai essayé mais sans effet de mettre ehCache.

    Voici le mapping de l'objet que j'affiche dans le tableau dont le parle ci-dessus.

    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
     
    <?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="my.project.webform.inter.entities">
        <class name="Interlocutor" table="int_interlocutor">
                <cache usage="read-write"/>
            <id name="id" type="integer" column="INTERLOCUTOR_ID">
                <generator class="native" />
            </id>
     
            <property name="company" column="INTERLOCUTOR_COMPANY" type="java.lang.String"
                not-null="false" />
            <property name="name" column="INTERLOCUTOR_NAME" type="java.lang.String"
                not-null="false" />
            <property name="firstname" column="INTERLOCUTOR_FIRSTNAME" type="java.lang.String"
                not-null="false" />
            <property name="email" column="INTERLOCUTOR_EMAIL" type="java.lang.String"
                not-null="true" />
            <property name="address" column="INTERLOCUTOR_ADDRESS" type="java.lang.String"
                not-null="false" />
            <property name="zipCode" column="INTERLOCUTOR_ZIPCODE"
                type="java.lang.String" not-null="false" />
            <property name="city" column="INTERLOCUTOR_CITY" type="java.lang.String"
                not-null="false" />
            <property name="country" column="INTERLOCUTOR_COUNTRY" type="java.lang.String"
                not-null="false" />
            <property name="phone" column="INTERLOCUTOR_PHONE"
                type="java.lang.String" not-null="false" />
     
            <property name="fax" column="INTERLOCUTOR_FAX"
                type="java.lang.String" not-null="false" />
     
            <property name="webSite" column="INTERLOCUTOR_WEBSITE" type="java.lang.String" />
     
            <property name="mapLink" column="INTERLOCUTOR_MAPLINK" type="java.lang.String" />
     
            <bag name="activities" table="int_inter_activities">
                <key column="INTERLOCUTOR_ID" not-null="false" />
                <many-to-many class="my.project.webform.inter.entities.Activity"
                    column="ACTIVITY_ID" />
            </bag>
     
            <bag name="modules" table="int_inter_modules" >
                <key column="INTERLOCUTOR_ID" not-null="false" />
                <many-to-many class="my.project.webform.inter.entities.Module"
                    column="MODULE_ID" />
            </bag>
     
            <bag name="areas" table="int_inter_areas">
                <key column="INTERLOCUTOR_ID" not-null="true" />
                <many-to-many class="my.project.webform.inter.entities.Area"
                    column="AREA_ID" />
            </bag>
     
            <many-to-one name="type" column="INTERLOCUTOR_TYPE"
                class="InterlocutorType" not-null="false" lazy="false"
                foreign-key="TYPE_ID" />
        </class>
    </hibernate-mapping>
    Lors de mes tests, je modifie les attributs "name", "company" etc.
    Au niveau des mes requêtes:
    - Tout ce qui de type Select est géré via Criteria
    - Dès que je fais une requête modifiante j'ai essayé de faire session.clear(), session.flush() ou session.evict(monObjet) et sans succès voir même avec plus de problème au niveau chargement de données.

    Une idée ?
    Merci d'avance

  2. #2
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    Bonsoir,

    Je suppose que tes transactions sont bien gérées.

    Vérifie l'endroit où tu geres la session hibernate (ouverture/fermeture).

    Normalement avec les jsf tu utilises :


    Comme tu es en isolation level 2 (repeatable read) (désolé j'utilise le read commited) essaye de faire un session.connection().rollback() juste après l'ouverture de la session Hibernate.
    Si cela change le comportement de ton application, je pense qu'il faut regarder du coté de la configuration de ta datasource et du pool de connexion.

    Cdt.

    Stéphane

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut
    Je pense avoir résolu mon problème. En effet, cela venait bien de la session hibernate. J'ai (à tord à priori) suivi la doc d'Hibernate avec la mise en place d'un ThreadLocal et c'est probablement cela qui posait problème. Désormais je travail directement sur la session elle même.

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

Discussions similaires

  1. [débutant] problème de lecture d'image
    Par shura dans le forum OpenGL
    Réponses: 16
    Dernier message: 03/07/2004, 18h05
  2. [TFileStream] Problème de lecture de string
    Par Pedro dans le forum Langage
    Réponses: 6
    Dernier message: 28/06/2004, 13h06
  3. problème de lecture base de registre
    Par pafounet3 dans le forum MFC
    Réponses: 10
    Dernier message: 31/12/2003, 14h06
  4. [fread] Problème de lecture de buffer
    Par karl3i dans le forum C
    Réponses: 2
    Dernier message: 25/09/2003, 09h21
  5. Réponses: 4
    Dernier message: 23/07/2003, 13h07

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