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 :

Requête SQL de jointure Hibernate


Sujet :

Hibernate Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Requête SQL de jointure Hibernate
    Bonjour,

    J'ai actuellement une requête hql toute simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		listTable1 = (List<Table1>) entityManagerFactory.createQuery("FROM Table1", Table1.class).getResultList();
    Maintenant, j'ai une table 2 avec une clé étrangère qui est la clé primaire de la table 1.
    Je voudrais, quand je récupère les informations de la table1, que cela me récupère également la table2. Par exemple, pour la première clé primaire de la table1, je peux avoir 15 enregistrement dans la table 2.
    En gros, je pense qu'il me faut un attribut List<Table2> table2 dans la classe de la Table1.
    Comment faire au niveau requête?

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Si tu as bien configuré le mapping des deux classes, tu peux faire comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Object[]> listTable1_2 = entityManagerFactory.createQuery("select t1,t2 FROM Table1 t1 join t1.table2 t2").getResultList();
    Pour la jointure, à toi de voir s'il s'agit d'un inner join ou left join.
    Ce que tu faits n'est pas du sql mais du jpql (JPA).

    En jqpl, il y a aussi le clause fetch pour la jointure qui te permet de charger directement les deux tables sans que d'autre requête sera exécuté lors de la lecture de l'attribut lié à la seconde table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listTable1 = (List<Table1>) entityManagerFactory.createQuery("FROM Table1 t1 join fetch t1.t2", Table1.class).getResultList();
    Dans ce cas, quand tu parcours la liste listTable1, tu peux directement avoir t2 sans qu'une requête à la base se fasse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(Table1 t1 : listTable1){
    Set<Table2> t2 = t1.getT2(); // Set ou List ou Collection, dépendant de ton mapping.
    }
    Tout cela n'est valable que si tu as bien configuré tes mapping.

    Utilise un nom de variable qui correspond au type de l'objet. entityManagerFactory doit être un EntityManager donc entityManager doit être plus approprié. Sinon ça donne confusion.

    A+.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Justement, je pense que cela pêche au niveau de la configuration des mappings
    Il me balance cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'null.TAble1' [FROM Table1 JOIN FETCH Table2.Table1]
    Structure de ma table 1:
    id nom
    1 nom1
    2 nom2

    Structure de ma table 2:
    id champ idTable1
    1 champ1 1
    2 champ2 1
    3 champ3 1
    ...

    Donc quand je récupère ma table1 faut que sa récupère ma table2.
    Par exemple, pour l'id1 de la table1, je doit récupérer aussi les 3 lignes de la table2

    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
    @Entity
    @Table(name = "Table1")
    public class Session implements Serializable {
     
    	/**
             * serialVersionUID
             */
    	private static final long serialVersionUID = 1L;
     
    	/**
             * id
             */
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	@Column(name = "id")
    	private Integer id;
     
    	/**
             * nom
             */
    	@Column(name = "nom", nullable = false)
    	private String nom;
     
    	@Transient
    	private List<TAble2> listTable2;
    }
    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
    @Entity
    @Table(name = "Table2")
    public class Route implements Serializable{
     
    	/**
             * serialVersionUID
             */
    	private static final long serialVersionUID = 1L;
     
    	/**
             * id
             */
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	@Column(name = "id")
    	private Integer id;
     
    	/**
             * champ
             */
    	@Column(name = "champ")
    	private String champ;
     
    	/**
             * idTable1
             */
    	@ManyToOne
    	@JoinColumn(name = "idTable1", referencedColumnName = "id", nullable = false)
    	private Table1 idTable1;	
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		listTable1= (List<Table1>) entityManagerFactory.createQuery("FROM Table1 JOIN FETCH Table2.Table1", Table1.class).getResultList();

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Tu as mal compris l'exemple:
    Citation Envoyé par andry.aime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listTable1 = (List<Table1>) entityManagerFactory.createQuery("FROM Table1 t1 join fetch t1.t2", Table1.class).getResultList();
    Soit t1 l'alias de l'entité Table1 dans le jpql et t2 (j'ai mis t2 pour l'exemple) le nom de l'attribut de la 2ème table dans l'entité Table1.

    Tu aurais au moins pris soin de tout renommer tes classes et nom d'attribut au lieu de poster de code à moitié modifier qui rend difficile de t'aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Entity
    @Table(name = "Table1")
    public class Session implements Serializable {
     
    @OneToMany(mappedBy="route")
    private List<Route> routes;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listTable1= (List<Session>) entityManagerFactory.createQuery("SELECT DISTINCT s FROM Session s JOIN FETCH s.routes", Session.class).getResultList();
    A+.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Quel est l'utilisé du DISTINCT ici?

    Actuellement, j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Entity
    @Table(name = "Session")
    public class Session implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	@Column(name = "idSession")
    	private Integer idSession;
     
    	@OneToMany(mappedBy="idRoute")
    	private List<Route> listRoutes;
    }
    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
    @Entity
    @Table(name = "Route")
    public class Route implements Serializable{
     
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	@Column(name = "idRoute")
    	private Integer idRoute;
     
    	@ManyToOne
    	@JoinColumn(name = "session", referencedColumnName = "idSession", nullable = false)
    	private Session session;	
    }
    Est-ce correct au niveau des jointures. Une Session doit contenir une liste de route

    DAO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		listSessions = (List<Session>) entityManagerFactory.createQuery("SELECT DISTINCT s FROM Session s JOIN FETCH s.listRoutes", Session.class).getResultList();

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    J'ai fait une erreur dans mon exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	@OneToMany(mappedBy="session")
    	private List<Route> listRoutes;
    L'utilité du distinct c'est d'avoir d'objet Session distincte dans la liste. Parce qu'avec la jointure, tu auras une même session qui se répète autant de fois que le nombre de routes qui vont avec.

    A+.

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai cette exception qui s'est déclenchée:
    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
    14:41:55,898  WARN ExceptionHandlerExceptionResolver:186 - Handler execution resulted in exception: Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.Session["listRoutes"]->org.hibernate.collection.internal.PersistentBag[0]->com.Route["session"]->...); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.Session["listRoutes"]->org.hibernate.collection.internal.PersistentBag[0]->com.Route["session"]->com.Session["listRoutes"]->....)
    janv. 03, 2017 2:41:55 PM org.apache.catalina.core.ApplicationDispatcher invoke
    GRAVE: "Servlet.service()" pour la servlet jsp a lancé une exception
    java.lang.IllegalStateException: Impossible de créer une session après que la réponse ait été envoyée
    	at org.apache.catalina.connector.Request.doGetSession(Request.java:2944)
    	at org.apache.catalina.connector.Request.getSession(Request.java:2314)
    	at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:895)
    	at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:231)
    	at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:570)
    	at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:515)
    	at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:137)
    	at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:109)
    	at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:60)
    	at org.apache.jsp.WEB_002dINF.views.error.error_jsp._jspService(error_jsp.java:118)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:720)
    	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584)
    	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523)
    	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:160)
    	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1244)
    	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:745)
     
    janv. 03, 2017 2:41:55 PM org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: Servlet.service() for servlet [client] in context with path [/] threw exception [javax.servlet.ServletException: java.lang.IllegalStateException: Impossible de créer une session après que la réponse ait été envoyée] with root cause
    java.lang.IllegalStateException: Impossible de créer une session après que la réponse ait été envoyée
    	at org.apache.catalina.connector.Request.doGetSession(Request.java:2944)
    	at org.apache.catalina.connector.Request.getSession(Request.java:2314)
    	at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:895)
    	at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:231)
    	at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:570)
    	at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:515)
    	at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:137)
    	at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:109)
    	at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:60)
    	at org.apache.jsp.WEB_002dINF.views.error.error_jsp._jspService(error_jsp.java:118)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:720)
    	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584)
    	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523)
    	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:160)
    	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1244)
    	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:745)

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	@JsonManagedReference
    	@OneToMany(mappedBy="session")
    	private List<Route> listRoutes;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	@JsonBackReference
    	@ManyToOne
    	@JoinColumn(name = "session", referencedColumnName = "idSession", nullable = false)
    	private Session session;
    A+.

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Merci, cela fonctionne.
    Par contre j'ai pas trop compris quand vraiment utiliser les annotation manyToOne, oneToMany, oneToOne, manyToMany
    Et puis ici, pourquoi faut que je les mette dans les 2 classes et non juste dans session

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par totot Voir le message
    Par contre j'ai pas trop compris quand vraiment utiliser les annotation manyToOne, oneToMany, oneToOne, manyToMany
    Je te conseille de lire ce tutoriel http://tahe.developpez.com/tutoriels...jb-jpa-spring/
    C'est expliqué dans le chapitre JPA avec des exemples.
    Citation Envoyé par totot Voir le message
    Et puis ici, pourquoi faut que je les mette dans les 2 classes et non juste dans session
    Tu peux mettre seulement dans l'une des classes mais cela dépend de ton besoin, une relation unidirectionnelle ou bidirectionnelle.

    A+.

Discussions similaires

  1. requete sql jointure + sum() + group by?
    Par bylka dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2008, 12h06
  2. requete sql jointure
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/03/2008, 11h02
  3. Problème requete SQL avec hibernate
    Par kakahn dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/01/2008, 12h08
  4. [SQL] Probleme requete sql (jointure)
    Par Pepito2030 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/09/2006, 18h15
  5. Requete SQL jointure plusieurs tables
    Par bibicha dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2006, 17h38

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