Bonjour,
j'ai actuellement une BD avec 2 tables (Proprietaire et Maison).
J'ai également les 2 javabeans correspondant.
Un propriétaire peut avoir plusieurs maisons, une maison ne peut appartenire qu'à une seul personne.
J'ai donc introduit les annotations ManyToOne et OneToMany pour représenter ce cas de figure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Entity public class Proprietaire { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; @Column(name = "name") private String name; @OneToMany(mappedBy="proprio") private Collection<Maison> maisonList; ... }Je cherche donc à avoir des clés primaires générées automatiquement lors de l'insertion en base et à maintenir une relation de clé étrangère entre les javabeans.
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 @Entity public class Maison { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; @Column(name = "adresse") private String adresse; @ManyToOne private Proprietaire proprio; ... }
Mon insertion en base ressemble à cela: (ma classe DAO)
Ainsi, lorsque je rajoute plusieurs maisons (via un dao.add(m1); où m1 m2 etc. sont des objets instanciés, j'ai éffectivement des clés primaires autogénérées qui s'incrémente comme il faut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // creation et initialisation de l'EntityManagerFactory public void add(T entity) { ... // creation de l'EntityManager em em.getTransaction().begin(); em.persist(entity); em.getTransaction().commit(); // fermeture de l'em ... }
Mais lorsque je tente de rajouter des Propriétaire, cette génération auto ne s'éffectue pas, et une exception de l'ordre suivant est levée:
Je me retrouve ainsi avec seulement un objet Proprio en base comportant l'id 1.javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not insert
Pourquoi cela fonctionne t-il parfaitement avec mes Maisons et pas avec mes Proprios ?
je n'avance plus.
Merci pour vos conseils
Partager