Bonjour à tous

je débute sur les EJB 3 et JPA et je commence par un exemple basique qui me pose problème.

Voici ma configuration :
serveur d'application Jboss 5
JDK 1.6
SGBD : mysql
ORM : hibernate

J'essaie de faire un insert dans une table commercial dont voici la DDL :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
CREATE TABLE `commercial` (            
                   `COMM_ID` int(11) NOT NULL,               
                   `COMM_TRIGRAMME` varchar(3) NOT NULL,     
                   `COMM_NOM` varchar(255) default NULL,     
                   `COMM_PRENOM` varchar(255) default NULL,  
                   PRIMARY KEY  (`COMM_ID`)                  
                 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
Voici le code de l'entity

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
 
@Entity
@Table(name="COMMERCIAL")
public class Commercial {
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "COMM_ID",updatable=false)
 
    private int id;
 
 
    @Column(name="COMM_PRENOM")
    private String firstname;
    @Column(name="COMM_NOM")
    private String lastname;
    @Column(name="COMM_TRIGRAMME")
    private String trigramme;
 
//getter et setter
 
}
J'ai une JSP toute simple qui fait appel à une servlet qui fait appel à l'EJB session et en particulier à une méthode qui insert les informations du formulaire de la JSP (nom,prenom et trigramme) dans la base de données.

Mon problème est que à la validation du formulaire, l'insertion me renvoie l'erreur suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'COMM_ID' doesn't have a default value
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2934)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3255)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1293)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1566)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1480)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1465)
    at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:365)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
    ... 92 more
La requete hibernate envoyée est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Hibernate: insert into COMMERCIAL (COMM_PRENOM, COMM_NOM, COMM_TRIGRAMME) values (?, ?, ?)
Je vois bien que il manque l'id COMM_ID dans la requete qui est executer mais je voudrais que hibernate se charge de l'inserer automatiquement.

Je suppose que il y doit y avoir un lien avec les annotations de l'entity mais ...

merci d'avance