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]afficher des timestamps


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut [hibernate]afficher des timestamps
    Salut a tous !

    Je rencontre qqs difficultés pour faire remonter des timestamps stoclés dans ma DB mysql en utilisant Hibernate.

    Considérant les settings et POJO suivants :

    POJOAlerts.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <!-- TimeStamp -->
    		<property name="timestamp" type="timestamp">
    			<column name="Timestamp" not-null="false"/>
    		</property>
    une classe chargée de générer du XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    strXML.append("<timestamp>");
    	  strXML.append(dbalert.getTimestamp().toString());
    strXML.append("</timestamp>");
    ...
    et la classe POJO qui set et get le timestamp

    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
     
    ...
    /**
               * Gets the current value of timestamp
               * @return Current value of timestamp
               */
    	  public java.sql.Timestamp getTimestamp() {
    	    return timestamp;
    	  }
     
    	  /**
               * Sets the value of timestamp
               * @param timestamp New value for timestamp
               */
    	  public void setTimestamp(java.sql.Timestamp timestamp) {
    	    this.timestamp=timestamp;
    	  }
    ...
    Bien entendu le type de la colonne de la DB est de type timestamp

    Je n'ai pas de probleme pour le SET du timestamp : les données sont bien inserrées dans la DB

    par contre lorsque j'essaye de de faire un getTimestamp() j'obtiens lerreur suivante :


    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
     
    javax.servlet.ServletException: could not initialize proxy - the owning Session was closed
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     
    cause mère
     
    org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
    	org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:56)
    	org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
    	org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
    	com.bla.tracer.POJOAlertsHistory$$EnhancerByCGLIB$$d2f69a4e.getTimestamp(<generated>)
    	com.bla.tracer.DeviceXML.cookXML(DeviceXML.java:147)
    	com.bla.tracer.GetDeviceLocationAction.execute(GetDeviceLocationAction.java:243)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

    Je ne vois pas vraiment pourquoi il n'arrive pas a recuperer ce fichu timestamp ....

    Avez vous une idée a me suggerer ?

  2. #2
    Membre Expert
    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
    Par défaut
    Pour une raison inconnue pour l'instant il essaye de charger le timestamp en lazy. Hors vraisemblament quand tu fais le getTimestamp tu as déja refemé la session (session.close()). Tout d'abord essaye de faire le get pendant que la session est ouverte. Si ca marche il faudra chercher pourquoi il est en lazy.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut
    En fait ce qui est tres étonnant c'est que je récupère déja d'autres données avant le timestamp :


    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
     
    //alerts part
    			if (!(alertsCollection.isEmpty())){				
    				strXML.append("<alerts q='"+Integer.toString(alertsCollection.size())+"' >");
    				//strXML.append("<alerts>"); 
    					//loop through collection
    					Iterator iter = alertsCollection.iterator();
    					while(iter.hasNext()){
    						POJOAlertsHistory dbalert = (POJOAlertsHistory) iter.next();
    						strXML.append("<alert>");
    							strXML.append("<alert_id>");
    							strXML.append(Integer.toString(dbalert.getId()));
    							strXML.append("</alert_id>");
    							strXML.append("<timestamp>");
    							strXML.append(dbalert.getTimestamp().toString());
    							//strXML.append("alert time foo");
    							strXML.append("</timestamp>");
    						strXML.append("</alert>");
    					}
    				strXML.append("</alerts>");
    			}
    Si on suprime la partie relative au timestamp et qu'on conserve uniquement la partie relative a getId tout fonctionne parfaitement et les id remontent bien.

    De plus dans cette classe je ne me connecte pas a Hibernate.
    En fait dans le constructeur de la classe, je passe un objet de type arraylist qui s'apelle alertsCollection qui contient une collection d'objets de type POJOAlertsHistory. Cette collection est créée avant la fermeture de la session hibernate.
    Peut etre que le problème est la ... mais je ne vois pas vraiment ou puisque cette collection d'objets est déja chargé en mémoire et devrait etre dispo meme apres la fermeture de la session Hibernate ce qui semble etre le cas puisque d'autres paramètres que le timestamp sont accessibles ....
    Fais moi savoir si tu as d'autres question pqe ca devient un peu compliqué a expliquer la

  4. #4
    Membre Expert
    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
    Par défaut
    C'est justement le principe du lazy. C'est que tu ne charge l'in que lorsque tu y accede. Chez toi apres avoir fermé la session. As tu fais le test d'y acceder la session en ouverte stp.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut
    Ok tu as raison c bien ca le probleme car si je laisse la session ouvert ca fonctionne bien...
    Comment puis-je corriger ce problème ?
    Est-ce que fais une erreur de conception en passant une collection d'objets POJO hibernate depuis une classe destinée a gerer les alerts vers une classe destinée a formater le tout en XML : ne devrais-je pas plutot faire appel a hibernate au moment de la génération du XML?

    Merci pour ton aide

    P.S. le forum et le site developpez.com ont qqs petits problèmes il me semble...

  6. #6
    Membre Expert
    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
    Par défaut
    Concernant le site j'ai aussi eu des problèmes.
    Montre moi stp le fichier xml complet.
    Essaye aussi de rajouter lazy="true" dans la property de ton timestamp

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut
    voila :

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    <?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>
    	<class name="com.bla.tracer.POJOAlertsHistory" table="alerts_history">
     
    		<!-- le champ ID de la table. -->
    		<id name="id" type="int" column="id" unsaved-value="0">
    			<generator class="identity"/>
    		</id>
     
    		<!-- DeviceId -->
    		<property name="DeviceId">
    			<column name="DeviceId" not-null="true"/>
    		</property>
     
    		<!-- DeviceAddress -->
    		<property name="DeviceAddress">
    			<column name="DeviceAddress" not-null="true"/>
    		</property>
     
    		<!-- TimeStamp -->
    		<property name="timestamp" type="timestamp">
    			<column name="Timestamp" not-null="false"/>
    		</property>
     
    		<!-- Distance -->
    		<property name="Distance">
    			<column name="Distance" length="250" not-null="false"/>
    		</property>
     
    		<!-- Longitude -->
    		<property name="Longitude">
    			<column name="Longitude" length="250" not-null="false"/>
    		</property>
     
    		<!-- Latitude -->
    		<property name="Latitude">
    			<column name="Latitude" length="250" not-null="false"/>
    		</property>
     
    		<!-- Speed -->
    		<property name="Speed">
    			<column name="Speed" length="250" not-null="false"/>
    		</property>
     
    		<!-- MaxSpeed -->
    		<property name="MaxSpeed">
    			<column name="MaxSpeed" length="250" not-null="false"/>
    		</property>
     
    		<!-- Altitude -->
    		<property name="Altitude">
    			<column name="Altitude" length="250" not-null="false"/>
    		</property>
     
    		<!-- Odometer -->
    		<property name="Odometer">
    			<column name="Odometer" length="250" not-null="false"/>
    		</property>
     
    		<!-- PanicAlert -->
    		<property name="PanicAlert">
    			<column name="PanicAlert" length="10" not-null="false"/>
    		</property>
     
    		<!-- ProximityAlert -->
    		<property name="ProximityAlert">
    			<column name="ProximityAlert" length="10" not-null="false"/>
    		</property>
     
    		<!-- SpeedAlert -->
    		<property name="SpeedAlert">
    			<column name="SpeedAlert" length="10" not-null="false"/>
    		</property>
     
    		<!-- AltitudeAlert -->
    		<property name="AltitudeAlert">
    			<column name="AltitudeAlert" length="10" not-null="false"/>
    		</property>
     
    		<!-- OdometerAlert -->
    		<property name="OdometerAlert">
    			<column name="OdometerAlert" length="10" not-null="false"/>
    		</property>
     
    		<!-- BatteryAlert -->
    		<property name="BatteryAlert">
    			<column name="BatteryAlert" length="10" not-null="false"/>
    		</property>
     
    		<!-- GpsAlert -->
    		<property name="GpsAlert">
    			<column name="GpsAlert" length="10" not-null="false"/>
    		</property>
     
    		<!-- DistanceAlert -->
    		<property name="DistanceAlert">
    			<column name="DistanceAlert" length="10" not-null="false"/>
    		</property>
     
     
    	</class>
    </hibernate-mapping>

  8. #8
    Membre Expert
    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
    Par défaut
    Et tu peux acceder à toutes les autre propriétées (pas seulement l'id) hors de la session (fais un test stp)?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut
    non en fait tu as raison j'ai fait un test plus tot et je n'accede qu'a l'id. les autres propriétés me retournent la meme erreur que timestamp ^^

    voici pour info la methode qui me crée la collection et qui se trouve dans une autre classe
    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
     
    public ArrayList getAlerts(String deviceAddress){
     
    		//hibernate session
    		Session hibSession;
    		Transaction tx;		 
    		hibSession = HibernateUtil.currentSession();
            	tx = hibSession.beginTransaction();
     
          	Query query = hibSession.createQuery("from POJOAlertsHistory a where a.DeviceAddress = '"+deviceAddress+"'");
     
          	//insert all the results into a collection that will be parsed later
          	ArrayList alertsCollection = new ArrayList();
     
          	for (Iterator it = query.iterate(); it.hasNext();) {
        		POJOAlertsHistory dbalert = (POJOAlertsHistory) it.next();
        		alertsCollection.add(dbalert); 
          	}
        	tx.commit();
            HibernateUtil.closeSession();
          	return alertsCollection;
     
    	}

  10. #10
    Membre Expert
    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
    Par défaut
    Est ce que tu es entrain de migrer une appli de h2.1 vers h3.0

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut
    non pas du tout j'ai tout fait evec hib 3 ....
    hibernate3.jar

  12. #12
    Membre Expert
    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
    Par défaut
    Commence par setter la classe avec le flag lazy="false"

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut
    re !

    J'ai essayé de rajouter lazy = "false"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	<class name="com.bla.tracer.POJOAlertsHistory" table="alerts_history" lazy="false">
    mais ca ne change rien

    Le message d'erreur est le meme (jai modifié un peu la classe donc ca n'est plus sur timestamp que ca bloque mais sur getDistance qui est le premier que j'apelle apres getId --- > le problème reste le meme ...

    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
     
    javax.servlet.ServletException: could not initialize proxy - the owning Session was closed
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     
    cause mère
     
    org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
    	org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:56)
    	org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
    	org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
    	com.bla.tracer.POJOAlertsHistory$$EnhancerByCGLIB$$9ba40781.getDistance(<generated>)
    	com.bla.tracer.DeviceXML.cookXML(DeviceXML.java:148)
    	com.bla.tracer.GetDeviceLocationAction.execute(GetDeviceLocationAction.java:243)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Par défaut
    Salut!

    Dasolé de relancer le sujet mais je n'arrive tjrs pas a trouver de solution à ce problème.

    J'ai bien le lazy=false dans mon chier de mapping.
    Mais j'ai toujours le mème problème.

    Aurais-tu une autre idée a me propposer ?


    Merci de ton aide.

Discussions similaires

  1. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  2. Réponses: 4
    Dernier message: 31/05/2004, 12h26
  3. [débutant] filtrer un fichier pour afficher des infos
    Par Valichou dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 21/04/2004, 11h44
  4. Réponses: 3
    Dernier message: 11/03/2004, 16h11
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

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