Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Hibernate et héritage

2 réponses
Avatar
captainpaf
Bonjour,

j'ai un soucis de compréhension pour la gestion de certains types
d'héritage avec hibernate.
J'ai une classe Intervention qui représente l'intervention d'un
technicien sur des lieux d'intervention.
J'ai 2 classes Agences et Copro qui représentent des lieux
d'intervention. J'ai une Interface Workable pour représenter tous les
lieux possible d'intervention. (donc Copro et Agence impléments
Workable)
Voici un bout de ma classe intervention :
<code>
public class Intervention implements Serializable, Comparable
{
private static final long serialVersionUID = -47953358484807299L;
private long id = 0;
//type de l'intervention
private short type =0;
//Lieu de l'intervention
private Workable workable =null;
//...
}
</code>
les class Copro et Agence son mappées et utilisées dans d'autres
endroits de l'application, elles utilisent incrément comme générator
d'id. Donc un object copro et une agence peuvent avoir le même id en
base de donnée.
Comment faire pour mappée l'interface Workable et différencier les
agences des copros sachant aussi quelles pourront implémenter d'autres
interfaces ?
J'espère que j'ai été à peu près clair. Si une personne pouvait avoir
une idée lumineuse, ça serait sympa car là je sèche un peu.

merci

2 réponses

Avatar
ToOmS
Il est peut-être trop tard pour répondre ?
Si j'ai bien compris, tu voudrais qu'un traitement soit différent
selon le type de l'objet référencé. N'est-ce pas le but de la
spécialisation (héritage) ? Tu ajoutes une méthode à ton interface
(workable) et tu l'implémente différemment dans les classes qui la
déclarent. En appelant cette méthode (save, etc.) tu exécute des
actions dépendant du type, non ?
Sinon, tu peux toujours faire .getClass() ou instanceof. Mais c'est
moins joli...
Avatar
captainpaf
Il est peut-être trop tard pour répondre ?
Si j'ai bien compris, tu voudrais qu'un traitement soit différent
selon le type de l'objet référencé. N'est-ce pas le but de la
spécialisation (héritage) ? Tu ajoutes une méthode à ton interface
(workable) et tu l'implémente différemment dans les classes qui la
déclarent. En appelant cette méthode (save, etc.) tu exécute des
actions dépendant du type, non ?
Sinon, tu peux toujours faire .getClass() ou instanceof. Mais c'est
moins joli...


Mon pb ne vient des méthodes métiers au niveau des interfaces ou des
sous class. mais de la meilleur façon d'enregistrer les relations entre
ces objets dans une bd en utilisant hibernate pour le mapping
relationnel.
En résumé, je souhaite enregistrer la relation entre une class
(Intervention) et un de ses attributs représenté par une interface
(Workable) en sachant que les class qui impléments Workable (Agence et
Copro) peuvent implémenter d'autres interfaces et étendre d'autres
classes.

je pense être sur une bonne piste. Hibernate semble utiliser une table
d'association pour gérer ce problème.
Voici mon fichier de mapping
<CODE>
<class name="Copro" table="copros">
<id name="id" type="long" column="id">
<generator class="native"/>
</id>
...
</class>

<class name="Agence" table="agences">
<id name="id" type="long" column="id">
<generator class="native"/>
</id>
...
</class>

<any name="workable" meta-type="string" id-type="long">
<meta-value value="COPRO" class="Copro"/>
<meta-value value="AGENCE" class="Agence"/>
<column name="WORKABLE_CLASS"/>
<column name="WORKABLE_ID"/>
</any>
</CODE>

Connaissez vous de meilleurs solutions ?