Bonjour,
J'ai une application qui appelle un session bean :
... et la méthode du Session Bean :
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
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 voici les 2 Entity Bean associés :
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 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 son cousin :
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 @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 ...
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.
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 @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 ...
Et bien la ligne :
... du Session Bean ajoute bien l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 em.persist(user);
Mais quand je décommente les lignes :
... j'obtiens l'exception 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
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); } }
Pourquoi cela ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
A+![]()
Partager