Exception lors d'une tentative d'insertion
	
	
		Bonjour,
J'ai une application qui appelle un session bean :
	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
   |  
public static void main(String[] args) {
        try {
 
            Context context = new InitialContext();
 
            GestionClient gestionClient = (GestionClient) context
                    .lookup("entreprise-ear/GestionClientBean/remote");
 
            Utilisateur user = new Utilisateur();
            user.setNom("TEST VILLE");
 
            List<Adresse> adresses = new ArrayList<Adresse>();
 
            Adresse adr = new Adresse();
            adr.setVille("VILLE");
            adresses.add(adr);            
 
            user.setAdresses(adresses);
 
            gestionClient.addUtilisateur(user);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    } | 
 ... et la méthode du Session Bean :
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | 
public void addUtilisateur(Utilisateur user) throws Exception {
        
        em.persist(user);
    
/*
        List<Adresse> adresses = user.getAdresses();
        
        for (Adresse adresse : adresses) {
            
            adresse.setUtilisateur(user);
            em.persist(adresse);
        }
*/
        
    } | 
 Et voici les 2 Entity Bean associés :
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   |  
@Entity
public class Utilisateur implements Serializable {
    private static final long serialVersionUID = 1L;
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
 
    private String nom;
 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "utilisateur")
    private List<Adresse> adresses;
 
    public Utilisateur() {
    }
 
// accesseurs ... | 
 ... et son cousin : :mrgreen:
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   |  
@Entity
public class Adresse implements Serializable {
    private static final long serialVersionUID = 1L;
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
 
    private String ville;
 
    @ManyToOne
    @JoinColumn(name = "utilisateur_fk", referencedColumnName = "id")
    private Utilisateur utilisateur;
 
// accesseurs ... | 
 Un utilisateur peut donc avoir plusieurs adresses et il existe donc une relation (1,1 to 1,n) entre la table Utilisateur et la table Adresse.
Et bien la ligne :
... du Session Bean ajoute bien l'utilisateur.
Mais quand je décommente les lignes :
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | 
public void addUtilisateur(Utilisateur user) throws Exception {
        
        em.persist(user);
    
        List<Adresse> adresses = user.getAdresses();
        
        for (Adresse adresse : adresses) {
            
            adresse.setUtilisateur(user);
            em.persist(adresse);
        }
        
    } | 
 ... j'obtiens l'exception suivante :
	Code:
	
1 2 3
   |  
2008-12-15 02:51:55,927 DEBUG [org.hibernate.util.JDBCExceptionReporter] (WorkerThread#0[127.0.0.1:54640]) could not insert: [entity.Adresse] [insert into Adresse (utilisateur_fk, ville) values (?, ?)]
java.sql.SQLException: Field 'id' doesn't have a default value  | 
 Pourquoi cela ? :?
A+ ;)