bonjour,
je lis actuellement un tuto de S. Tahé sur j2ee, dans lequel il est demandé de créer l'équivalant des opérations CRUD en JPQL, mais j'obtiens une erreur sur un persist.
En fait j'ai deux questions:
1/de manière théorique, je suis un peu perdu par l'opération persist, qui ne rend rien (void). Supposons (comme ce sera le cas pour ma classe "cotisation") que j'ai une classe avec plusieurs champs: id (clé primaire), version (pour JPA : version), et disons nom (string). ce que je fais c'est que je créé un nouvel objet en remplissant uniquement le champ "nom", je laisse id et version à 0. Ensuite je fais le persist et puyisque j'ai ajouté l'annotation "@GeneratedValue...auto" (je n'ai plus les détails) normalement la version et la clé primaire devraient être mises à jour.
ma question théorique est la suivante: je fais le presist et si tout marche l'objet se retrouve dans la base, alors comment puis-je le retrouver, puisque le seul moyen c'est par la clé primaire que je n'ai pas car persist ne rend rien?
dois-je faire une requête sur tous les autres champs?
2/je reprends le cas précédent, car j'obtiens une erreur du compilateur, voici les fichiers concernés:
cotisation.java
cotisation_dao.java (voir aussi + bas)
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 (...) @Entity public class cotisation implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; @Version private int version; @Column private float csgrds; @Column private float csgd; @Column private float secu; @Column private float retraite; public cotisation() { } public cotisation(float csgrds, float csgd, float secu, float retraite) { this.csgrds = csgrds; this.csgd = csgd; this.secu = secu; this.retraite = retraite; } (...)
cotisation_dao c'est l'implémentation d'une interface ICotisationDao, c'est la partie du programme qui gère les appels à la base, pour la classe cotisation (voir le code + bas), je sais que ce code n'est pas bon (l'id doit changer lors de l'opération persist)
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 (...) @Transactional public class cotisation_dao implements ICotisationDao { @PersistenceContext private EntityManager em; // retour: l'entité persistée // exceptions: l'entité existe déjà, ze_cotisation n'est pas valide public cotisation create(cotisation ze_cotisation) { cotisation sortie = null; try { int svg_clé = ze_cotisation.getId(); em.persist(ze_cotisation); sortie = em.find(cotisation.class, svg_clé); } catch (EntityExistsException e) { throw new PamException("Erreur dans dao/cotisation_dao/create - opération persist", 1); } //catch (Exception e) { // System.out.println(e.toString()); //throw new PamException("Erreur dans dao/cotisation_dao/create - opération persist", 2); //} return sortie; } (...)
ICotisationDao.java
voilà, j'ai tout mis, ah non, j'oubliais l'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 (...) public interface ICotisationDao { public cotisation create(cotisation cotisation); public cotisation edit(cotisation cotisation); public void destroy(cotisation cotisation); public cotisation find_id (int id); public List<cotisation> findAll(); }
l'erreur se situe dans la ligne du persist de cotisation_dao.Exception in thread "main" java.lang.NullPointerException
at intro_j2ee.dao.cotisation_dao.create(cotisation_dao.java:34)
at intro_j2ee.main.Main.main(Main.java:32)
Java Result: 1
lolveley.
Partager