Bonjour

Je m'entraine sur JPA et je suis confronté à un cas un peu particulier car je ne vois pas trop comment résoudre les relations. Pour mieux comprendre, la base que j'essaye de creer est une base de gestion de comptes banquaires.

J'ai donc un compte banquaire sur lequel je peux faire des opérations (classe mère).
Les opérations sont soit des opérations courantes et des opérations qui rentrent dans un budget (mes 2 classes filles).

Je souhaite pouvoir afficher les dernieres opérations effectuées (tout type confondu) mais aussi les dernieres opérations de chaque type et ce de manière séparée.

Voici mes entités :

Classe compte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
@Entity
@Table(name = "comptes")
public class Compte {
 
	@Id
	@Column(name="compte_id")
	@GeneratedValue
	private long compteId;
 
	@OneToMany(mappedBy="compteCible")
	Set<Operation> operationsDuCompte;
}
Classe Operation
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
 
@Entity
@Table(name = "operations")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(
		name="operation_type",
		discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("operation")
public class Operation implements Serializable{
 
	private static final long serialVersionUID = 1586211012574147999L;
 
	@Id
	@Column(name="operation_id")
	@GeneratedValue
	private long operationId;
 
	@ManyToOne
	@JoinColumn(name="compte_id")
	private Compte compteCible;
 
}
Classe OperationCourante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
@Entity
@Table(name = "operations_courantes")
@DiscriminatorValue("operationCourante")
public class OperationCourante extends Operation {
 
}
Classe OperationBudget
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
@Entity
@Table(name = "operations_budgets")
@DiscriminatorValue("operationBudget")
public class OperationBudget extends Operation{
 
	private static final long serialVersionUID = 5477320690840222454L;
 
	@ManyToOne
	@JoinColumn(name="budget_id")
	private Budget budgetCible;
}
Classe Budget
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
@Entity
@Table(name ="budgets")
public class Budget {
 
	@Id
	@Column(name="budget_id")
	@GeneratedValue
	private long budgetId;
 
	@OneToMany(mappedBy="budgetCible")
	Set<OperationBudget> listeDesOperationsSurLeBudget;
}
Alors mes questions sont :
1 - Est ce que ma conception de base est bonne ou existe t-il une meilleure pratique ?
2 - Que dois-je faire pour pouvoir récuperer de manière séparée mes différents types d'opération ? faut-il un OneToMany unidirectionnel ciblant chacune des classes filles dans ma classe Compte ?
3 - N'est ce pas risqué ou compliqué pour faire ensuite les updates directement sur les données des classes filles ?

Merci a ceux qui prendrait le temps de répondre