Bonjour,

J'ai un problème avec une relation bidirectionelle one-to-many many-to-one que je ne comprends pas....je trouve des exemples sur internet mais rien de très précis en terme d'explication.
Mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
@Entity
public class Department {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
 
 
	private String name;
 
	@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "department", orphanRemoval = false)
	private List<Employee> employees = new ArrayList<Employee>();
 
	// GETTER/SETTER
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 Employee {
 
	@Id @GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
 
	private String name;
 
	@ManyToOne
	@JoinColumn(name="DEPARTMENT_ID", nullable = true)
	private Department department;
 
	// GETTER/SETTER
Mon mapping est comme celui car le schéma de la base de données ne peut être modifié et il n'y a pas de table d'association/liaison entre ces 2 tables.

Mainenant mon code qui pose problème :
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
 
Department department = new Department("DEPARTMENT 1");
department.getEmployees().add(new Employee("Pierre", department));
department.getEmployees().add(new Employee("Jean", department));
 
// Création du département et de 2 employés
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
 
department=(Department)session.merge(department);
 
tx.commit();
HibernateUtil.closeSession();
 
 
department.getEmployees().remove(0);
department.getEmployees().add(new Employee("Tito", department));
 
session = HibernateUtil.currentSession();
tx = session.beginTransaction();
 
session.merge(department);
 
tx.commit();
HibernateUtil.closeSession();
Tout se passe bien au niveau de la création du département et de mes 2 employés.
C'est ensuite que cela se gatte....je souhaite supprimer un employé et en rajouter un nouveau.
Problème, il rajoute bien le nouveau employé, donc le département a maintenant 3 employé mais moi, je souhaiterais qu'il en est que 2, car le premier a été supprimé.
Je vois que dans les requêtes SQL généré, il ne fait rien pour supprimer l'employé d'index 0 dans ma liste du département: pourquoi ???

Par contre, si je mets orphanRemoval = true, cela corrige mon problème mais il a supprimé totalement mon employé d'index 0, alors que je souhaite simplement détruire la relation de l'employé d'index 0, qu'il n'appartienne plus à aucun département mais qu'il soit présent en base de donnés...c'est un peu pour ça que j'ai mis nullable = true sur la proprièté Department de l'entité Employee et orphanRemoval = false; au départ pour lui indiquer que j'accepte les orphelins.

Merci d'avance de vos lumières, conseils....