Problème de requête avec JPA
Streamooc
Messages postés
74
Date d'inscription
Statut
Membre
Dernière intervention
-
Streamooc Messages postés 74 Date d'inscription Statut Membre Dernière intervention -
Streamooc Messages postés 74 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous.Je désire récupérer les employés par groupe de la table intermédiaire EMPLOYE_GROUPE mais je n'arrive pas.J'ai besoin d'aides s'il vous plaît.J'ai fais le mapping en se basant sur le fait qu'un employé peut appartenir à plusieurs groupes et q'un groupe contient plusieurs employés.
13:27:17,715 INFO [stdout] (default task-7) Probleme de requete
13:27:17,720 ERROR [stderr] (default task-7) java.lang.IllegalArgumentException: org.hibernate.QueryException: illegal attempt to dereference collection [employe0_.CODE_EMPLOYE.groupes] with element property reference [numeroGroupe] [SELECT e FROM jpa.domaine.Employe e WHERE e.groupes.numeroGroupe=:x]
13:27:17,725 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679)
13:27:17,727 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
13:27:17,728 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
13:27:17,730 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:313)
13:27:17,731 ERROR [stderr] (default task-7) at jpa.dao.DaoImpl.employesParGroupe(DaoImpl.java:381)
public List<Employe> employesParGroupe(Long codeGroupe) {
List<Employe> employes=new ArrayList<Employe>();
try {
entityManagerFactory=Persistence.createEntityManagerFactory("jpa");
entityManager=entityManagerFactory.createEntityManager();
entityTransaction=entityManager.getTransaction();
entityTransaction.begin();
String jpql="SELECT e FROM Employe e WHERE e.groupes.numeroGroupe=:x";
TypedQuery<Employe> query=entityManager.createQuery(jpql,Employe.class);
query.setParameter("x", codeGroupe);
employes=query.getResultList();
entityTransaction.commit();
entityManager.close();
entityManagerFactory.close();
System.out.println("Liste des employes par groupe!!!");
} catch (Exception e) {
System.out.println("Probleme de requete");
e.printStackTrace();
}
return employes;
}
@Entity
@Table(name="EMPLOYE")
public class Employe implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CODE_EMPLOYE")
private Long codeEmploye;
@ManyToMany
@JoinTable(name="EMPLOYE_GROUPE",
joinColumns=@JoinColumn(name="CODE_EMPLOYE"),
inverseJoinColumns=@JoinColumn(name="NUMERO_GROUPE")
)
private Collection<Groupe> groupes;
}
@Entity
@Table(name="GROUPE")
public class Groupe implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="NUMERO_GROUPE")
private Long numeroGroupe;
@OneToMany(mappedBy="groupes")
private Collection<Employe> employes;
}
13:27:17,715 INFO [stdout] (default task-7) Probleme de requete
13:27:17,720 ERROR [stderr] (default task-7) java.lang.IllegalArgumentException: org.hibernate.QueryException: illegal attempt to dereference collection [employe0_.CODE_EMPLOYE.groupes] with element property reference [numeroGroupe] [SELECT e FROM jpa.domaine.Employe e WHERE e.groupes.numeroGroupe=:x]
13:27:17,725 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679)
13:27:17,727 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
13:27:17,728 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
13:27:17,730 ERROR [stderr] (default task-7) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:313)
13:27:17,731 ERROR [stderr] (default task-7) at jpa.dao.DaoImpl.employesParGroupe(DaoImpl.java:381)
public List<Employe> employesParGroupe(Long codeGroupe) {
List<Employe> employes=new ArrayList<Employe>();
try {
entityManagerFactory=Persistence.createEntityManagerFactory("jpa");
entityManager=entityManagerFactory.createEntityManager();
entityTransaction=entityManager.getTransaction();
entityTransaction.begin();
String jpql="SELECT e FROM Employe e WHERE e.groupes.numeroGroupe=:x";
TypedQuery<Employe> query=entityManager.createQuery(jpql,Employe.class);
query.setParameter("x", codeGroupe);
employes=query.getResultList();
entityTransaction.commit();
entityManager.close();
entityManagerFactory.close();
System.out.println("Liste des employes par groupe!!!");
} catch (Exception e) {
System.out.println("Probleme de requete");
e.printStackTrace();
}
return employes;
}
@Entity
@Table(name="EMPLOYE")
public class Employe implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CODE_EMPLOYE")
private Long codeEmploye;
@ManyToMany
@JoinTable(name="EMPLOYE_GROUPE",
joinColumns=@JoinColumn(name="CODE_EMPLOYE"),
inverseJoinColumns=@JoinColumn(name="NUMERO_GROUPE")
)
private Collection<Groupe> groupes;
}
@Entity
@Table(name="GROUPE")
public class Groupe implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="NUMERO_GROUPE")
private Long numeroGroupe;
@OneToMany(mappedBy="groupes")
private Collection<Employe> employes;
}
A voir également:
- Problème de requête avec JPA
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ? ✓ - Forum Loisirs / Divertissements
- Erreur de requete facebook - Forum Facebook
- Requete sql pix - Forum PHP
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Android
- Roxane cherche des informations pour écrire un rapport sur la diversité. avec un moteur de recherche généraliste, elle souhaite limiter les résultats de sa recherche aux pages de l’organisation internationale de la francophonie. quelle requête doit-elle taper dans le champ de recherche ? - Forum Réseaux sociaux
5 réponses
Bonjour,
Si on traduit
D'où ton exception : illegal attempt to dereference collection
SELECT e FROM Employe e WHERE e.groupes.numeroGroupe=:x
Si on traduit
e.groupes.numeroGroupe=:xen Java, ça ferait :
Employe e = ... Collection<Groupe> g = e.groupes; Long n = g.numeroGroupe; // Erreur : g est une Collection, pas un Group !!
D'où ton exception : illegal attempt to dereference collection
Merci beaucoup KX mais si j'utilise
//class Employe
@ManyToMany
@JoinTable(name="EMPLOYE_GROUPE",
joinColumns=@JoinColumn(name="CODE_EMPLOYE"),
inverseJoinColumns=@JoinColumn(name="NUMERO_GROUPE")
)
private Groupe groupe;
//class Groupe
@OneToMany(mappedBy="groupe")
private Collection<Employe> employes;
//DaoImpl
String jpql="SELECT e FROM Employe e WHERE e.groupe.numeroGroupe=:x";
j'aurai cette erreur:
Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: sn.objis.livrablejpa.domaine.Employe.groupe
at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:322)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1864)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:904)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:731)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154)
... 7 more
Comment pourrais-je procéder?
//class Employe
@ManyToMany
@JoinTable(name="EMPLOYE_GROUPE",
joinColumns=@JoinColumn(name="CODE_EMPLOYE"),
inverseJoinColumns=@JoinColumn(name="NUMERO_GROUPE")
)
private Groupe groupe;
//class Groupe
@OneToMany(mappedBy="groupe")
private Collection<Employe> employes;
//DaoImpl
String jpql="SELECT e FROM Employe e WHERE e.groupe.numeroGroupe=:x";
j'aurai cette erreur:
Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: sn.objis.livrablejpa.domaine.Employe.groupe
at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:322)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1864)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:904)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:731)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154)
... 7 more
Comment pourrais-je procéder?
Bonjour KX.Merci beaucoup.Je n'ai plus l'erreur mais au niveau du contrôleur j'ai cette erreur de NumberFormatException.J'ai essayé de la capturer en vain.Même si j'utilise le type int pour le numeroGroupe dans la table Groupe et que je parse avec parseInteger dans le contrôleur l'erreur demeure la même.Ou bien j'ai mal procédé dans la page jsp?
//Liste des employés avec leur groupe
Caused by: java.lang.NumberFormatException: For input string: "numeroGroupe"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at javax.el.ListELResolver.toInteger(ListELResolver.java:409)
at javax.el.ListELResolver.getValue(ListELResolver.java:202)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110)
at com.sun.el.parser.AstValue.getValue(AstValue.java:139)
at com.sun.el.parser.AstValue.getValue(AstValue.java:203)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:917)
at org.apache.jsp.assets.gestionnaire.employesParGroupe_jsp._jspx_meth_c_005fforEach_005f0(employesParGroupe_jsp.java:828)
at org.apache.jsp.assets.gestionnaire.employesParGroupe_jsp._jspService(employesParGroupe_jsp.java:616)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
... 44 more
<div class="form-group"> <label for="exampleInputPassword1">Saisir le code du groupe</label> <input type="number" class="form-control" name="codeGroupe" id="exampleInputPassword1" placeholder="Code du groupe" required="required"> </div>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String codeGr=request.getParameter("codeGroupe"); try { Long cGr=Long.parseLong(codeGr); DaoImpl d=new DaoImpl(); List<Employe> listeEmployes=new ArrayList<Employe>(); listeEmployes=d.employesParGroupe(cGr); request.setAttribute("liste", listeEmployes); request.getRequestDispatcher("employesParGroupe.jsp").forward(request, response); } catch (NumberFormatException e) { System.out.println("n'est pas un nombre"); } }
//Liste des employés avec leur groupe
<table id="example2" class="table table-bordered table-hover"> <thead> <tr> <th>Groupe</th> <th>Employe</th> </tr> </thead> <tbody> <c:forEach items="${requestScope.liste }" var="emp"> <tr> <td>${emp.groupes.numeroGroupe}</td> <td>${emp.codeEmploye}</td> </tr> </c:forEach> </tbody> <tfoot> <tr> <th>Groupe</th> <th>Employe</th> </tr> </tfoot> </table> </div> <!-- /.box-body --> </div>
@Entity @Table(name="EMPLOYE") public class Employe implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="CODE_EMPLOYE") private Long codeEmploye; @ManyToMany @JoinTable(name="EMPLOYE_GROUPE", joinColumns=@JoinColumn(name="CODE_EMPLOYE"), inverseJoinColumns=@JoinColumn(name="NUMERO_GROUPE") ) private Collection<Groupe> groupes; } @Entity @Table(name="GROUPE") public class Groupe implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="NUMERO_GROUPE") private Long numeroGroupe; @OneToMany(mappedBy="groupes") private Collection<Employe> employes; }
Merci beaucoup KX mais si je procède de la façon ci-dessous j'ai cette erreur.
<tr>
<th>Groupe</th>
<th>Employe</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestScope.liste }" var="emp">
<c:forEach items="${emp}" var="g">
<tr>
<td>${g.numeroGroupe}</td>
<td>${emp.codeEmploye}</td>
</tr>
</c:forEach>
</c:forEach>
</tbody>
Caused by: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toIterator(ForEachSupport.java:84)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:66)
at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:241)
at org.apache.jsp.employesParGroupe_jsp._jspx_meth_c_005fforEach_005f1(employesParGroupe_jsp.java:866)
... 47 more
J'ai écris une méthode pour lister les groupes à laquelle je fais appel dans le contrôleur comme suit dans la page jsp. Sur mon navigateur la liste de tous les groupes s'affiche lorsque je saisis le numéro du groupe.Comment pourrais régler ça?Je ne veux pas afficher toute la liste des groupes,je veux uniquement afficher un groupe avec ses employés lorsque je saisis le code du groupe
public List<Groupe> listeGroupes(){
String jpql="SELECT g FROM Groupe g";
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String codeGr=request.getParameter("codeGroupe");
try {
Long cGr=Long.parseLong(codeGr);
DaoImpl d=new DaoImpl();
List<Employe> listeEmployes=new ArrayList<Employe>();
List<Groupe> listeGroupes=new ArrayList<Groupe>();
listeEmployes=service.employesParGroupe(cGr);
listeGroupes=d.listeGroupes();
request.setAttribute("liste", listeEmployes);
request.setAttribute("listeGr",listeGroupes);
request.getRequestDispatcher("employesParGroupe.jsp").forward(request, response);
} catch (NumberFormatException e) {
System.out.println("n'est pas un nombre");
}
}
<th>Groupe</th>
<th>Employe</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestScope.listeGr }" var="g">
<c:forEach items="${requestScope.liste}" var="emp">
<tr>
<td>${g.numeroGroupe}</td>
<td>${emp.codeEmploye}</td>
</tr>
</c:forEach>
</c:forEach>
</tbody>
<tr>
<th>Groupe</th>
<th>Employe</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestScope.liste }" var="emp">
<c:forEach items="${emp}" var="g">
<tr>
<td>${g.numeroGroupe}</td>
<td>${emp.codeEmploye}</td>
</tr>
</c:forEach>
</c:forEach>
</tbody>
Caused by: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toIterator(ForEachSupport.java:84)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:66)
at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:241)
at org.apache.jsp.employesParGroupe_jsp._jspx_meth_c_005fforEach_005f1(employesParGroupe_jsp.java:866)
... 47 more
J'ai écris une méthode pour lister les groupes à laquelle je fais appel dans le contrôleur comme suit dans la page jsp. Sur mon navigateur la liste de tous les groupes s'affiche lorsque je saisis le numéro du groupe.Comment pourrais régler ça?Je ne veux pas afficher toute la liste des groupes,je veux uniquement afficher un groupe avec ses employés lorsque je saisis le code du groupe
public List<Groupe> listeGroupes(){
String jpql="SELECT g FROM Groupe g";
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String codeGr=request.getParameter("codeGroupe");
try {
Long cGr=Long.parseLong(codeGr);
DaoImpl d=new DaoImpl();
List<Employe> listeEmployes=new ArrayList<Employe>();
List<Groupe> listeGroupes=new ArrayList<Groupe>();
listeEmployes=service.employesParGroupe(cGr);
listeGroupes=d.listeGroupes();
request.setAttribute("liste", listeEmployes);
request.setAttribute("listeGr",listeGroupes);
request.getRequestDispatcher("employesParGroupe.jsp").forward(request, response);
} catch (NumberFormatException e) {
System.out.println("n'est pas un nombre");
}
}
<th>Groupe</th>
<th>Employe</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestScope.listeGr }" var="g">
<c:forEach items="${requestScope.liste}" var="emp">
<tr>
<td>${g.numeroGroupe}</td>
<td>${emp.codeEmploye}</td>
</tr>
</c:forEach>
</c:forEach>
</tbody>
<c:forEach items="${requestScope.liste }" var="emp"> <c:forEach items="${emp}" var="g">
C'est toujours le même problème, pour t'en sortir il faut que tu comprennes de quel type sont chaque objet que tu manipule, ici ${emp} est un Employe, si tu veux itérer sur les groupes il faut utiliser ${emp.groupes} et seulement à ce moment là tu pourras faire ${g.numeroGroupe}
<c:forEach items="${requestScope.liste}" var="emp"> <c:forEach items="${emp.groupes}" var="g">
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour KX.Merci pour la réponse.En procédant comme vous l'avez dit je remarque que seul le numéro de l'employé est affiché.Celà est dû au fait que la colonne NUMERO_GROUPE est NULL dans la table employe après l'ajout d'un employé à un groupe.Je ne sais pas si la méthode d'ajout a un problème.Veuillez la voir s'il vous plaît:
public void addEmployeToGroupe(Long codeEmpl, Long codeGr) {
try {
//Retrouvons l'employe par son code
Employe e=em.find(Employe.class, codeEmpl);
//Retrouvons le groupe par son code
Groupe g=em.find(Groupe.class, codeGr);
//Ajoutons un groupe à un employe
e.getGroupes().add(g);
//Ajoutons un employe à un groupe
g.getEmployes().add(e);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Entity
@Table(name="GROUPE")
public class Groupe implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="NUMERO_GROUPE")
private Long numeroGroupe;
private String nomGroupe;
//Un groupe contient plusieurs employ�s
@OneToMany(mappedBy="groupes")
private Collection<Employe> employes;
}
@Entity
@Table(name="EMPLOYE")
public class Employe implements Serializable{
/**
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CODE_EMPLOYE")
private Long codeEmploye;
private String nomEmploye;
private String sexeEmploye;
private String emailEmploye;
private String adresseEmploye;
private String contactEmploye;
private String roleEmploye;
@ManyToOne
@JoinColumn(name="CODE_EMPLOYE_SUP")
private Employe employeSup;
//Plusieurs employ�s pour un groupe
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="EMPLOYE_GROUPE",
joinColumns=@JoinColumn(name="CODE_EMPLOYE"),
inverseJoinColumns=@JoinColumn(name="NUMERO_GROUPE")
)
private Collection<Groupe> groupes;
}
<form role="form" action="<%=request.getContextPath()%>/registerEmployeToGroupe"
method="post">
<div class="box-body">
<div class="form-group">
<label for="exampleInputPassword1">Sélectionner l'employé</label>
<select
class="form-control" name="codeEmploye">
<c:forEach var="emp" items="${listeEmployes}">
<option value="${emp.codeEmploye}">${emp.codeEmploye }- ${emp.nomEmploye}</option>
</c:forEach>
</select>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Sélectionner le groupe</label>
<select
class="form-control" name="numeroGroupe">
<c:forEach var="grp" items="${listeGroupes}">
<option value="${grp.numeroGroupe}">${grp.numeroGroupe}- ${grp.nomGroupe}</option>
</c:forEach>
</select>
</div>
</div>
<!-- /.box-body -->
<div class="box-footer">
<button type="submit" class="btn btn-primary">Valider</button>
</div>
</form>
@WebServlet(name="regempgrp",urlPatterns={"/registerEmployeToGroupe"})
public class RegisterEmployeToGroupeControleur extends HttpServlet{
@EJB
private IBanqueDaoLocal metierlocal;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Recuperation des parametres de la requete
String codeEmpl=request.getParameter("codeEmploye");
Employe e=new Employe(codeEmpl);
e.setCodeEmploye(Long.parseLong(codeEmpl));
String numeroGrp=request.getParameter("numeroGroupe");
Groupe g=new Groupe(numeroGrp);
g.setNumeroGroupe(Long.parseLong(codeEmpl));
// Insertion
metierlocal.addEmployeToGroupe(e.getCodeEmploye(), g.getNumeroGroupe());
RequestDispatcher rs = request.getRequestDispatcher("assets/gestionnaire/gestionEmployeGroupe/succesRegisterEmployeToGroupe.jsp");
rs.forward(request, response);
}
}
public void addEmployeToGroupe(Long codeEmpl, Long codeGr) {
try {
//Retrouvons l'employe par son code
Employe e=em.find(Employe.class, codeEmpl);
//Retrouvons le groupe par son code
Groupe g=em.find(Groupe.class, codeGr);
//Ajoutons un groupe à un employe
e.getGroupes().add(g);
//Ajoutons un employe à un groupe
g.getEmployes().add(e);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Entity
@Table(name="GROUPE")
public class Groupe implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="NUMERO_GROUPE")
private Long numeroGroupe;
private String nomGroupe;
//Un groupe contient plusieurs employ�s
@OneToMany(mappedBy="groupes")
private Collection<Employe> employes;
}
@Entity
@Table(name="EMPLOYE")
public class Employe implements Serializable{
/**
- /
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CODE_EMPLOYE")
private Long codeEmploye;
private String nomEmploye;
private String sexeEmploye;
private String emailEmploye;
private String adresseEmploye;
private String contactEmploye;
private String roleEmploye;
@ManyToOne
@JoinColumn(name="CODE_EMPLOYE_SUP")
private Employe employeSup;
//Plusieurs employ�s pour un groupe
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="EMPLOYE_GROUPE",
joinColumns=@JoinColumn(name="CODE_EMPLOYE"),
inverseJoinColumns=@JoinColumn(name="NUMERO_GROUPE")
)
private Collection<Groupe> groupes;
}
<form role="form" action="<%=request.getContextPath()%>/registerEmployeToGroupe"
method="post">
<div class="box-body">
<div class="form-group">
<label for="exampleInputPassword1">Sélectionner l'employé</label>
<select
class="form-control" name="codeEmploye">
<c:forEach var="emp" items="${listeEmployes}">
<option value="${emp.codeEmploye}">${emp.codeEmploye }- ${emp.nomEmploye}</option>
</c:forEach>
</select>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Sélectionner le groupe</label>
<select
class="form-control" name="numeroGroupe">
<c:forEach var="grp" items="${listeGroupes}">
<option value="${grp.numeroGroupe}">${grp.numeroGroupe}- ${grp.nomGroupe}</option>
</c:forEach>
</select>
</div>
</div>
<!-- /.box-body -->
<div class="box-footer">
<button type="submit" class="btn btn-primary">Valider</button>
</div>
</form>
@WebServlet(name="regempgrp",urlPatterns={"/registerEmployeToGroupe"})
public class RegisterEmployeToGroupeControleur extends HttpServlet{
@EJB
private IBanqueDaoLocal metierlocal;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Recuperation des parametres de la requete
String codeEmpl=request.getParameter("codeEmploye");
Employe e=new Employe(codeEmpl);
e.setCodeEmploye(Long.parseLong(codeEmpl));
String numeroGrp=request.getParameter("numeroGroupe");
Groupe g=new Groupe(numeroGrp);
g.setNumeroGroupe(Long.parseLong(codeEmpl));
// Insertion
metierlocal.addEmployeToGroupe(e.getCodeEmploye(), g.getNumeroGroupe());
RequestDispatcher rs = request.getRequestDispatcher("assets/gestionnaire/gestionEmployeGroupe/succesRegisterEmployeToGroupe.jsp");
rs.forward(request, response);
}
}