Bonjour,
je développe une application web avec dans la partie modèle des ejb.
mon problème réside dans le fait que si je fais un em.find(Poste.class, id)
j'arrive par le getter à récupérer le nom mais pas la collection d'éléments
quelqu'un aurait une idée
voici mon entity:
mon bean de session
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 public class PosteDeTravail implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="posteTravail_seq") @SequenceGenerator(name="posteTravail_seq",sequenceName="poste_de_travail_code_machine_seq",allocationSize = 1) @Basic(optional = false) @Column(name = "code_machine") private Integer codeMachine; @Basic(optional = false) @Column(name = "nom_machine") private String nomMachine; @Column(name = "utilisateur") private String utilisateur; @Column(name = "administrateur") private String administrateur; @Column(name = "etat") private String etat; @Column(name = "remarque") private String remarque; @OneToMany(mappedBy = "machine") private Collection<Materiel> materielCollection; // @OneToMany(mappedBy = "nomMachine") // private Collection<PriseSalle> priseSalleCollection; @JoinColumn(name = "prise", referencedColumnName = "id_prise") @ManyToOne private PriseSalle prise; @JoinColumn(name = "salle", referencedColumnName = "code_salle") @ManyToOne private Salle salle; @OneToMany(cascade = CascadeType.ALL, mappedBy = "machine") private Collection<PortCommutateur> portCommutateurCollection;
une deuxième question que je me pose c'est quand on crée une entité avec comme attribut une collection doit-on faire le setCollection(collection)
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 Collection<PortCommutateur> getPortsByMachine(Integer idMachine) { PosteDeTravail poste = em.find(PosteDeTravail.class, idMachine); System.out.println("poste"+poste); System.out.println("poste.nom"+poste.getNomMachine()); System.out.println("poste.materiel"+poste.getMaterielCollection().size()); System.out.println("ports"+poste.getPortCommutateurCollection().size()); poste.getPortCommutateurCollection().size(); for(PortCommutateur port : poste.getPortCommutateurCollection()) System.out.println("port"+port); return poste.getPortCommutateurCollection(); }
ou il suffit de créer chacun des éléments
voici comment je procéde mais j'avoue que j'hésite pas mal et ai besoin d'explications
la création d'un poste de travail :
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 public Integer creerCommutateur(String nom, Integer idsalle, Integer nbports, Integer portsgiga,Integer idmateriel) { Salle salle = em.find(Salle.class,idsalle); Materiel materiel = em.find(Materiel.class,idmateriel); Collection<Materiel> colmateriel = new ArrayList<Materiel>(); PosteDeTravail postetravail = new PosteDeTravail(nom, salle, "null", "service informatique"); postetravail.setMaterielCollection(colmateriel); postetravail.setEtat("en service"); em.persist(postetravail); materiel.setMachine(postetravail); materiel.setEtatMateriel("en service"); em.persist(materiel); em.flush(); System.out.println("postetravail"+postetravail.getCodeMachine()); for(Integer i=1;i<=nbports;i++){ portCommutateurBean.addPort("P"+i, "megabit", postetravail); } for(Integer i=1;i<=portsgiga;i++){ portCommutateurBean.addPort("G"+i, "gigabit", postetravail); } em.refresh(postetravail); System.out.println("poste+ports"+postetravail.getPortCommutateurCollection()); if(postetravail.getPortCommutateurCollection()!=null) System.out.println("postes+taille ports"+postetravail.getPortCommutateurCollection().size()); return postetravail.getCodeMachine(); }
Partager