Héritage et relation OneToMany
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:
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:
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:
1 2 3 4 5 6 7
|
@Entity
@Table(name = "operations_courantes")
@DiscriminatorValue("operationCourante")
public class OperationCourante extends Operation {
} |
Classe OperationBudget
Code:
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:
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