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 :

[Hibernate] passer "null" à un constructeur dans la requête


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Hibernate] passer "null" à un constructeur dans la requête
    Bonjour,

    J'ai une requête du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(a.id, b.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    ou les 2 champs id sont du même type (String ou Long, dans mon cas).

    Je souhaiterais créer les 2 requêtes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(a.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(b.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...

    mais comme mes objets sont du même type, je ne peux pas créer 2 constructeurs.

    Ma question est : puis-je faire quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(a.id, null) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    ce qui me retourne tel quel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class com.myCompany.MyObject
    Sinon, il me reste l'option de créer un constructeur avec un boolean en paramètre supplémentaire.

    Merci de votre aide!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    tu crée une relation d'héritage MyObjectA et MyObjectB qui héritent de MyObject ont les constructeurs adéquat pour initialisier l'attribut qui t'interessent dans chacun des cas... et tu manipules tes instance alors crées au travers du type MyObject ?
    tes requetes deviennt alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObjectA(a.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObjectB(b.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    Les deux requetes te retourneront bien une Liste de de type List<MyObect>...

    Il existe peut etre plus simple...




    Citation Envoyé par Muscador Voir le message
    Bonjour,

    J'ai une requête du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(a.id, b.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    ou les 2 champs id sont du même type (String ou Long, dans mon cas).

    Je souhaiterais créer les 2 requêtes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(a.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(b.id) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...

    mais comme mes objets sont du même type, je ne peux pas créer 2 constructeurs.

    Ma question est : puis-je faire quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new com.myCompany.MyObject(a.id, null) 
    from com.myCompany.dto.ObjetA a, com.myCompany.dto.ObjetB b
    where ...
    ce qui me retourne tel quel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class com.myCompany.MyObject
    Sinon, il me reste l'option de créer un constructeur avec un boolean en paramètre supplémentaire.

    Merci de votre aide!

  3. #3
    Invité
    Invité(e)
    Par défaut Bonne idée
    Bonne idée, je vais l'adopter, merci!

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

Discussions similaires

  1. passer un entré de type float dans ma requête
    Par jalalnet dans le forum ADO.NET
    Réponses: 7
    Dernier message: 14/05/2011, 15h20

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