IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Comment mapper une collection d'interface ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de chriscoolletoubibe
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut Comment mapper une collection d'interface ?
    Bonjour,
    je sais, vous allez me dire "pas la peine de persister une interface puisque cette dernière ne peut être instanciée" et vous avez raison.

    Mon problème est autre:

    J'ai l'interface que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface IExecutable {
     
    	public void execute();
     
    }
    Trois classes qui implémentent l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    @Entity(name = "Door_Close")
    public class Close extends Command implements Serializable,IExecutable{
    (...)
     public void execute() {
     
            //code de mon exécution de la fermeture de ma porte
     
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    @Entity(name = "Door_Open")
    public class Open extends Command implements Serializable,IExecutable{
     
    (...)
     public void execute() {
     
            //code de mon exécution de l'ouverture de ma porte
     
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    @Entity(name = "Scenario")
    public class Scenario  implements Serializable,IExecutable{
     
    (...)
     public void execute() {
     
            //code de mon exécution du scenario
     
        }
     
    }
    et une classe persistante qui détient un collection d'objets exécutables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    @Entity(name = "User")
    public class User  implements Serializable{
     
    @Comment mapper cette relation?
    private Set<IExecutable actionsPossibles = new HashSet<IExecutable>();
     
     
     
    (...)
    }

    Voila la question est : comment mapper la collection de ma dernière classe?

    Merci déjà pour le coup d'œil que vous venez jeter à mon problème.

    et merci pour vos futures contributions ;-)

  2. #2
    Membre confirmé
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Par défaut
    Sauf si je me trompe, il n'est pas possible de faire le mapping dont tu parles. Pour preuve la balise création d'un mapping est CLASS (dans hibernate.cfg.xml), pareil pour l'annotation correspondante (Entity).
    Dans une de mes applications j'ai eu le même besoin que toi, car je suis un fan de la programmation par Interface. C'est d'ailleurs ce que je te propose de faire. A ta place, pour chaque classe de mon application je créerais un interface qu'elle implémenterait. Tu peux aussi passer par de classes abstraites mais c'est beaucoup moins souple que les interfaces.
    C'est de cette façon que j'ai simuler la modélisation du mapping des interfaces dans mon application. Et finalement, les POJO (classes d'implémentation) ne servent qu'à l'instanciation des objets.
    J'espère t'avoir aidé.

  3. #3
    Membre confirmé
    Avatar de chriscoolletoubibe
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    Merci bien de l'intérêt que porte à la question.J'ai effectivement trouvé une parade avec des classes abstraites, mais ca ne me convient pas totalement car je suis obligé à un endroit de faire un instanceof (et je n'aime pas ca du tout).

    Pourrais-tu juste préciser ton autre solution ? parce que je n'ai pas tout compris.

    Merci d'avance

  4. #4
    Membre confirmé
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Par défaut
    Je ne vois pas trop comment tu pourrais te passer des instanceOf car hibernate ne connais que les classe java (et non les interfaces). Même en redéfinissant toute ton application en terme d'interface (exemple ci-dessous), je crois qu'à un moment ou un autre instanceOf pour s'imposer


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public interface IUser {
     
    private Set<IExecutable> getActionsPossibles() ;
    (...)
    }
    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(name = "User")
    public class User  implements Serializable,IUser{
     
    @override
    private Set<IExecutable> getActionsPossibles(){
      
    // ici il te faudra le code qui permet de récupérer toutes des actions possibles
    //à mon avis tu devrai avoir fais ce mapping en dur dans les fichiers ressources de définition de classe
    
    // Il est possible que tu n'échappes par aux classes abstraites ici.
    } 
     (...)
    }

  5. #5
    Membre confirmé
    Avatar de chriscoolletoubibe
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    Oui, en fait j'utilise déjà la méthode que tu préconises, en fait, le soucis de l'instanceof ne vient pas d'hibernate dans mon cas mais du fait que j'ai un objet "trigger", qui a une référence vers un exécutable.
    Le "trigger" étant lui même un exécutable, je vais être obligé de mettre mon "instanceof" dans la méthode "execute" de mon trigger afin de vérifier qu'un trigger ne puisse pas exécuter d'autre trigger. Ca devient en fait presque une considération métier.

    Bah après tout un seul "instanceof" n'a jamais tué personne

    en tout cas merci pour ton aide.
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Comment créer une collection ?
    Par Dan971 dans le forum C#
    Réponses: 9
    Dernier message: 08/10/2006, 16h13
  2. Comment créer une collection d'objet ?
    Par ced600 dans le forum VBScript
    Réponses: 3
    Dernier message: 11/09/2006, 10h48
  3. [C#]Comment trier une collection?
    Par Cube55 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/06/2006, 19h18
  4. Réponses: 7
    Dernier message: 10/05/2006, 11h15
  5. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo