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

Spring Java Discussion :

Spring & Hibernate [Data]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut Spring & Hibernate
    Salut,
    Je voulais assurer les contraintes d'integrités entre mes tables. Alors j'ai rajouté une relation many-to-one dans la table qui contient une clé étrangére d'une autre table.
    comme suite :
    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    <?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>
    <!-- 
        Created by the Middlegen Hibernate plugin 2.2
     
        http://boss.bekk.no/boss/middlegen/
        http://www.hibernate.org/
    -->
     
    <class 
        name="com.pia.agp.mapping.Intervenant" 
        table="intervenant"
        lazy="false"
    >
     
        <id
            name="intervenantId"
            type="java.lang.Integer"
            column="INTERVENANT_ID"
        >
     
            <generator class="increment" />
        </id>
     
        <property
            name="intervenantNom"
            type="java.lang.String"
            column="INTERVENANT_NOM"
            length="30"
        />
        <property
            name="intervenantPrenom"
            type="java.lang.String"
            column="INTERVENANT_PRENOM"
            length="30"
        />
        <property
            name="intervenantLogin"
            type="java.lang.String"
            column="INTERVENANT_LOGIN"
            length="30"
        />
        <property
            name="intervenantMdp"
            type="java.lang.String"
            column="INTERVENANT_MDP"
            length="30"
        />
        <property
            name="intervenantMdp2"
            type="java.lang.String"
            column="INTERVENANT_MDP2"
            length="30"
        />
        <property
            name="intervenantEmail"
            type="java.lang.String"
            column="INTERVENANT_EMAIL"
            length="30"
        />
        <property
            name="intervenantTel"
            type="java.lang.String"
            column="INTERVENANT_TEL"
            length="15"
        />
        <property
            name="intervenantFonction"
            type="java.lang.String"
            column="INTERVENANT_FONCTION"
            length="20"
        />
        <property
            name="intervenantDatedebutcontrat"
            type="java.sql.Date"
            column="INTERVENANT_DATEDEBUTCONTRAT"
            not-null="true"
            length="10"
        />
        <property
            name="intervenantDatefincontrat"
            type="java.sql.Date"
            column="INTERVENANT_DATEFINCONTRAT"
            not-null="true"
            length="10"
        />
     
        <property
            name="coutjournalierexperianId"
            type="java.lang.String"
            column="COUTJOURNALIEREXPERIAN_ID"
            not-null="true"
            length="32"
        />
     
    <!-- 
        <property
            name="droitId"
            type="java.lang.Long"
            column="DROIT_ID"
            not-null="true"
        />
    	<many-to-one
                name="coutjournalierexperianId"    
                class="com.pia.agp.mapping.Coutjournalierexperian"
                cascade="none"
                outer-join="auto"
                update="true"
                insert="true"
                column="COUTJOURNALIEREXPERIAN_ID"
                not-null="true"
        />
     
    	<many-to-one
                name="droitId"    
                class="com.pia.agp.mapping.Droit"
                cascade="none"
                outer-join="auto"
                update="true"
                insert="true"
                column="DROIT_ID"
                not-null="true"
        />
     
    -->	
    	<many-to-one name="droit" class="com.pia.agp.mapping.Droit" column="DROIT_ID"/>
        <!-- Associations -->
     
     
    </class>
    </hibernate-mapping>
    donc j'ai rajouté dans ma classe Intervenant.java ,un objet droit de type Droit qui permettera de faire la liaison entre mes deux tables (Hibernate va faire le reste du moins c'est ce que j'ai compris).
    Jusqu'ici il y a pas de probléme, pour testé cela .
    dans ma jsp quand j'essaye de recuperer les droits depuis l'objet droit, j'y arrive pas
    voila comment je fais
    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
    <spring:bind path="intervenant.droit.droitId">
    						          	<td>
    										<select name="${status.expression}" value="${status.value}" rows="3" >
    							      			<c:forEach items="${optionsComboDroit}" var="optionComboDroit">
    							      				<c:choose>
    							      					<c:when test="${intervenant.droit.droitId==optionComboDroit}">
    							      						<option selected>${optionComboDroit}</option>
    							      					</c:when>
    							      					<c:otherwise>
    							      						<option>${optionComboDroit}</option>
    							      					</c:otherwise>
    							      				</c:choose>
    							      			</c:forEach>
    							      		</select>
    							      		</td>
    							      	  </spring:bind>
    et j'i l'erreur 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    ERROR [http-8081-Processor23] - "Servlet.service()" pour la servlet intervenant a généré une exception
    org.springframework.beans.NullValueInNestedPathException: Invalid property 'droit' of bean class [com.pia.agp.mapping.Intervenant]: Value of nested property 'droit' is null
    	at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:394)
    	at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:369)
    	at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:475)
    	at org.springframework.validation.BindException.getFieldValue(BindException.java:337)
    	at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:117)
    	at org.springframework.web.servlet.tags.BindTag.doStartTagInternal(BindTag.java:115)
    	at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:68)
    	at org.apache.jsp.vues.edit_jsp._jspService(edit_jsp.java:766)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
    	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:111)
    	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:965)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:744)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394)
    	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:348)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    	at java.lang.Thread.run(Unknown Source)
    il accepte pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <spring:bind path="intervenant.droit.droitId">
    je sais vraiment pas qu'est ce qui va pas, Est ce que le faite quej'ai rajouté un objet droit ds ma classe alors que j'avais un long droitId ?
    ou bien c autre chose.

    Merci de votre aide

  2. #2
    Membre éclairé Avatar de dgouyette
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 75
    Par défaut
    Tu as regardé dans ton controleur, une fois que tu as fait ton appel à la base de données si ton objet est null ?

    P.S. : je trouve plus élégant d'ajouter mes objet dans mon model retourné par spring et de le parser avec jstl du style : ${model.monObjet.name} par exemple

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Salut,
    Je vous explique ce que je fais :
    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
    <spring:bind path="intervenant.droit">
    	<td>
    		<select name="${status.expression}" value="${status.value}" rows="3" >
    				<c:forEach items="${optionsComboDroit}" var="optionComboDroit">
    					 <c:choose>
    							<c:when test="${intervenant.droit==optionComboDroit}">
    							<option selected>${optionComboDroit}</option>
        					</c:when>
        					<c:otherwise>
        						<option>${optionComboDroit}</option>
        					</c:otherwise>
          		  </c:choose>
          	</c:forEach>
      		</select>
      	</td>
    </spring:bind>
    avec ce code dans ma JSP je remplis mon comboBox "Droit", au fait dans je redéfinis la méthode referenceData de mon controleur et je met dedans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.put("optionsComboDroit",service.getDroitCombo());
    ce code appel la méthode getDroitCombo qui récupére les id de la BD
    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 String[] getDroitCombo() {
    		System.out.println("Get droit combo ****");
    		int i = 0;
    		/* on appel la methode de la couche DAO qui recupere les donnees de la BD*/
    		List list = dao.getAllDroit();
    		String temp[] = new String[list.size()];
    		System.out.println("SIZE : "+list.size());
    		/* On boucle sur notre list pour remplir le tableau de string */
    		for (Iterator iter = list.iterator(); iter.hasNext();){
    			temp[i++] = ((Long) iter.next()).toString();
    			System.out.println(temp[i-1]);
    		}
    		return temp;
     
    	}
    Donc jusqu'ici je remplis bien mon comboBox, donc j'ai aucun probléme d'affichage.
    Mais dés que je veux sauvgarder mon formulaire ,le probléme se pose, car moi dans mon comboBox j'ai des Long qui correspondent aux droitId de l'objet Droit, alors que moi je dois enregistrer un objet Droit "droit". ce qui veut dire que je dois convertir mon text en objet (je crois).

    Merci

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    D'aprés mes recherches il y a PropertyEditorSupport qui permet apparament de convertir un text en objet . pour l'instant j'ai pas trouvé d'exemple montrant comment faire.
    Mais je suis meme pas sur que c'est la bonne solution. Donc si vous avez des suggestions a me faire, ça serait les bienvenu

    Merci

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Salut,
    Effectivement le choix que j'ai fait marche bien. Voila comment j'ai fais ,pour les gens qui peuvent rencontrer le même probléme .

    Dans ma JSP j'ai rien changé, mais avant de sauvegarder mes champs dans ma base ,je convertis le String récupéré depuis le comboBox et je le convertis en Objet Droit. Je fais ça grace à la classe 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package com.pia.agp.web;
     
    import java.beans.PropertyEditorSupport;
     
    import org.springframework.util.StringUtils;
     
    import com.pia.agp.mapping.Droit;
     
     
     
    public class DroitPropertyEditor extends PropertyEditorSupport {
     
     
    	public void setAsText(final String text) {
     
    		if (StringUtils.hasText(text)) {
    			  Droit droit = new Droit(Long.parseLong(text));
    			  setValue(droit);
    		} 
    		else {
    			super.setAsText(text);
    		}
    	}
     
    	public String getAsText() {
    	    Object value = getValue();
    	    String id = "";
    	    if (value != null) {
    	      id = ((Droit) value).getDroitId().toString();
    	    }
    	    return id;
    	}
     
    }
    cette classe me permet d'entrer un String et de récupérer un Objet que je cast par la suite en Droit.
    et voila, j'espere que ça vous aidera.
    Bonne chance
    PS : je recommande vivement la lecture des chapitre 3 (IoC) et 13(SpringMVC) de la documenttaion de Spring .

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

Discussions similaires

  1. Spring et Hibernate mise en oeuvre simple
    Par dstauret dans le forum Hibernate
    Réponses: 6
    Dernier message: 12/12/2006, 23h21
  2. Réponses: 5
    Dernier message: 12/05/2006, 22h02
  3. SPRING+STRUTS+HIBERNATE. Une bonne solution ?
    Par ollivier dans le forum Struts 1
    Réponses: 9
    Dernier message: 10/04/2006, 13h16
  4. [Hibernate][Spring] Session Hibernate initialisée
    Par mauvais_karma dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/08/2005, 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