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;
	 ...
}
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;
 
	 ...
}
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.

Mon insertion en base ressemble à cela: (ma classe DAO)
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
...
}
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.

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:

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not insert
Je me retrouve ainsi avec seulement un objet Proprio en base comportant l'id 1.

Pourquoi cela fonctionne t-il parfaitement avec mes Maisons et pas avec mes Proprios ?
je n'avance plus.
Merci pour vos conseils