Bonjour à tous,
Je suis débutant avec Hibernate et je me retrouve confronté à un problème que je n'arrive pas à résoudre.
J'ai une table Personne (
id INT PRIMARY KEY,
nom VARCHAR NOT NULL DEFAULT '',
prenom VARCHAR NOT NULL DEFAULT '',
profession VARCHAR NOT NULL DEFAULT '');
Je veux que les champs nom, prenom et profession ne soient pas null mais qu'ils aient la chaîne vide comme valeur par défaut s'il ne sont pas renseignés.
Dans le fichier de mapping de la table Personne, j'ai spécifié les attributs dynamic-insert="true" et dynamic-update="true".
Lorsque je fait un INSERT il n'y a pas de problème, le code suivant fonctionne très bien:
Comme vous le voyez, le champ Profession n'a pas été renseigné donc lors de l'insert la valeur enregistrée sera la chaîne vide ''.
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 private void creerPersonne() { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); Personne personne = new Personne(); personne.setNom("NomFamille"); personne.setPrenom("Prénom"); session.saveOrUpdate(personne ); tx.commit(); HibernateUtil.closeSession(); }
Mon problème vient ensuite si j'essaye de modifier la personne:
C'est ici que j'obtiens une erreur au moment de l'enregistrement en base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // Récupération de la personne ... personne.setPrenom("NouveauPrénom"); session.saveOrUpdate(personne ); tx.commit(); HibernateUtil.closeSession();
En fait, j'ai vérifié la valeur de profession avant l'enregistrement de la personne et il est null au lieu d'être la chaîne vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Caused by: org.h2.jdbc.JdbcBatchUpdateException: NULL not allowed for column "PROFESSION"; SQL statement: update personne set nom=?, prenom=?, profession=? where ID=? [90006-137]
Je pensais que le fait d'avoir spécifié l'option dynamic-update="true" corrigerait le problème mais je pense qu'Hibernate essaye d'enregistrer le champ profession justement parce qu'il a changé de valeur (null en structure alors qu'en base il est la chaîne vide). Peut-être que la solution au problème serait de réussir à charger en structure la valeur par défaut au lieu de null mais je ne sais pas comment faire.
Bref, je suis un peu perdu donc je m'en remet à vos connaissance d'Hibernate.
Merci d'avance pour votre aide,
Florian
Partager