Problème valeur null lors du UPDATE
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:
Code:
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();
} |
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 ''.
Mon problème vient ensuite si j'essaye de modifier la personne:
Code:
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(); |
C'est ici que j'obtiens une erreur au moment de l'enregistrement en base :
Code:
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] |
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.
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