Bonjour a tout le monde,
Je découvre en ce moment Hibernate et je développe une petite application qui me permet de mettre en oeuvre mes connaissances.
ci-dessous mes descripteurs XML simplifiés:
- contrat
- personne
- societe
=> une personne peut être associée à une même société de plusieurs façons (TYPE)
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 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ContratEntite" table="CONTRAT"> <composite-id> <key-property name="identPersonne" column="NOPERS" /> <key-property name="identSociete" column="SOCIETE" /> <key-property name="typeContrat" column="TYPE" /> </composite-id> <many-to-one name="personne" class="PersonneEntite" fetch="join" insert="false" update="false"> <column name="NOPERS" /> </many-to-one> <many-to-one name="societe" class="SocieteEntite" fetch="join" insert="false" update="false"> <column name="SOCIETE" /> </many-to-one> <property name="typeContrat" type="char" insert="false" update="false"> <column name="TYPE" /> </property> </class> </hibernate-mapping>
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 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="PersonneEntite" table="PERSONNE"> <id name="id" type="java.lang.Integer"> <column name="NOPERS" /> <generator class="assigned" /> </id> <property name="nom" type="java.lang.String"> <column name="NOM" /> </property> <set name="listeLabel" table="CONTRAT" inverse="false" lazy="true"> <key> <column name="NOPERS" /> </key> <one-to-many class="ContratEntite" /> </set> </class> </hibernate-mapping>
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 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="SocieteEntite" table="SOCIETE"> <id name="id" type="java.lang.Integer"> <column name="NOSOC" /> <generator class="assigned" /> </id> <property name="nom" type="java.lang.String"> <column name="DENOMINATION" /> </property> </class> </hibernate-mapping>
Au niveau de la lecture, tout se passe bien.
Mon problème se pose au moment où j'essaye de rajouter une société (déjà créée) à une personne (déjà existante elle aussi) : j'ai un message indiquant qu'un des champ de ma clé ne peut pas contenir de valeurs NULL.
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 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Le champ 'NOPERS' ne peut être vide (null) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427) at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1980) ... 58 more
Quand je demande à afficher les logs hibernate, il essaie effectivement de mettre à jour la donnée du contrat avec une valeur NULL
Pour info, la base de données est sur MySQL et l'IHM développé en GWT mais je pense que mon problème est dans la description des xml ci-dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Hibernate: update CONTRAT set NOPERS=null where NOPERS=?
Merci d'avance à tous ceux qui peuvent m'aider.
Partager