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 :

foreign key et left join


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Par défaut foreign key et left join
    Bonjour,
    j'ai un problème avec hibernate avec un left join dont je ne saisie pas finalement l'utilisation.
    j'ai une table emp et une table serv
    emp:
    no number(7) pk
    nom varchar2(25)
    service_no number(7) fk

    serv:
    no number(7) pk
    nom varchar2(25)

    donc plusieurs employées par service

    j'ai mappé les tables comme suit :
    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
     
    <class name="Employee" table="emp">
    	<id name="id" column="no">
    		<generator class="increment" />
    	</id>
    	<property name="name" column="nom" type="java.lang.String"/>
    	<many-to-one name="serviceId" column="service_no" class="Service" not-null="true"/>
    </class>
     
    <class name="Service" table="serv">
    	<id name="id" column="no">
    		<generator class="increment" />
    	</id>
    	<property name="name" column="nom" type="java.lang.String"/>
    </class>
    puis j'aimerai créer une requête de ce type : "select * from emp e left outer join serv s on e.service_no = s.no where s.nom = $nom"
    pour retrouver tous les employées appartenant à un service dont je ne connais que le nom.

    j'écris donc la requête hql correspondante : "from Employee E left join Service S with E.serviceId = S.id where S.name = $name";

    j'ai un npe mais je ne comprend pas sa signification

    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
    10:23:48,296 ERROR [action]:253 - "Servlet.service()" pour la servlet action a généré une exception
    </p>java.lang.NullPointerException
    	at org.hibernate.hql.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:312)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3275)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3067)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
    	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
    	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
    	at solutec.struts.stockhandler.dao.ImplServiceDAO.getService(ImplServiceDAO.java:18)
    	at solutec.struts.stockhandler.struts.action.SelectServiceAction.execute(SelectServiceAction.java:25)
    	at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
    	at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
    	at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
    	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	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:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    	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:174)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
    	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:689)
    	at java.lang.Thread.run(Thread.java:595)
    si vous pouvez me donner un petit coup de pouce ce serait sympa, c'est surement un cas d'école

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Ce serait plutôt un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from Employee emp left join emp.serviceId ser where ser.name = ....

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Par défaut
    merci je vais tester ça
    je voulais savoir aussi si dans mon dto Employee.java

    faut-il un attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private long serviceId;
    ou plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Service service;
    ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Plutôt la deuxième solution. Tu dois manipuler des objets pas les clefs directement.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 37
    Par défaut
    merci cela fonctionne très bien

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

Discussions similaires

  1. Probleme 'ALTER TABLE' et 'FOREIGN KEY'
    Par maahta dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2003, 14h25
  2. [IB71] Je ne peux plus supprimer mes foreign key...
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 3
    Dernier message: 19/09/2003, 14h39
  3. [postgresql][foreign key]
    Par elea1206 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/08/2003, 12h07
  4. [Foreign Key] Besoin d'explication.
    Par Andry dans le forum Débuter
    Réponses: 4
    Dernier message: 28/05/2003, 11h34
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 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