[netbeans,hibernate] erreur dans un persist
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
Code:
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.java (voir aussi + bas)
Code:
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;
}
(...) |
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)
ICotisationDao.java
Code:
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();
} |
voilà, j'ai tout mis, ah non, j'oubliais l'erreur:
Citation:
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
l'erreur se situe dans la ligne du persist de cotisation_dao.
lolveley.