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]NUMBER vers BigDecimal inconvertible


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut [Hibernate]NUMBER vers BigDecimal inconvertible
    Bonjour,

    J'ai en base un identifiant d'une table de type NUMBER.
    Côté DAO, je fais une requête qui me récupère une liste de ces identifiants sous certains critères via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<Integer> res = new ArrayList<Integer>();
    res = (List<Integer>) aQuery.getResultList();
    Et bien quelle surprise de voir que malgré ce que je demande, ça refuse de me faire une List<Integer> mais quand je regarde le détail, c'est des éléments de tyope BigDecimal que j'ai (autrement dit ça se fiche de la conversion que je demande). C'est ennuyeux quand j'utilise cette liste dans la suite du code et que j'en attends des Integer...

    Alors certes je peux parcourir ma liste d'élements et les convertir un par un, mais c'est stupide et coûteux...

    Qu'en pensez-vous?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Ca n'inspire personne cette histoire...

  3. #3
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J'ai en base un identifiant d'une table de type NUMBER.
    Normal j'ai deja eu ce souci, les Number sont mappés en BigDecimal, faudrait que tu recuperes en List<BigDecimal> aussi, mais dis moi est ce vraiment vérifié l'utilisation de "NUMBER" coté base? un simple int ne te ferait pas l'affaire?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    est ce vraiment vérifié l'utilisation de "NUMBER" coté base? un simple int ne te ferait pas l'affaire?
    Là, c'est pas moi qui ai conçu la base de données, et je doute qu'ils révolutionne tout ce qui est en prod pour la partie que je développe. M'enfin sortir un type qui veut pas être casté, c'est fort quand-même!

  5. #5
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    On se comprend peut être pas, si tu peux pas modifier niveau base, pourquoi tu ferais pas ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<BigDecimal> res = new ArrayList<BigDecimal>();
    res = (List<BigDecimal>) aQuery.getResultList();

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par stof Voir le message
    Et bien quelle surprise de voir que malgré ce que je demande, ça refuse de me faire une List<Integer>
    En même temps, avec un peu de base en java, on sais que le casting, ca sert à expliciter au compilateur qu'on sais quel format on aura en sortie, pas à forcer la méthode appelée à subitement changer de comportement. Tu veux des Integer, ben mappe ces colonnes hibernate correctement sur des integer dans tes fichiers de config, et pas sur des big_decimal!
    C'est à l'appelant de ce conformer à la signature d'une méthode, pas à la méthode de deviner (et comment elle le pourrait) à quoi ressemble le code de l'appelant!

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    pourquoi tu ferais pas ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<BigDecimal> res = new ArrayList<BigDecimal>();
    res = (List<BigDecimal>) aQuery.getResultList();
    Parce que le but c'est de récupérer une list d'Integer en sortie.

    Citation Envoyé par tchize_ Voir le message
    Tu veux des Integer, ben mappe ces colonnes hibernate correctement sur des integer dans tes fichiers de config, et pas sur des big_decimal!
    Je me rend compte que j'ai mal expliqué ce que je faisais : en fait sur ce coup-là, c'est une requête en createNativeQuery, c'est pour ça (effectivement si je demandais un champ Integer d'une classe Hibernate, ça ne poserait pas de problème).
    Mais ce qui m'étonne donc, c'est qu'un NUMBER ne puisse pas être casté en Integer (puisque de toutes façons aQuery.getResultList doit être casté, j'imaginais naïvement pouvoir caster en Integer tant qu'à faire...)

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Bon, je suis retourné à une requête utilisant les classes Hibernate.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par stof Voir le message
    Mais ce qui m'étonne donc, c'est qu'un NUMBER ne puisse pas être casté en Integer
    En même temps, un Integer est un Number, mais un Number n'est pas nécessairement un Integer! (ça peut être un BigDecimal comme tu l'a découvert). Avec une requete native, le type a la sortie est décidé par le driver jdbc en fonction de la colonne.

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

Discussions similaires

  1. [SGBD] Connexion de Eclipse (Hibernate) vers SQL Server
    Par Michel38 dans le forum Hibernate
    Réponses: 4
    Dernier message: 11/03/2012, 16h39
  2. Réponses: 0
    Dernier message: 24/11/2008, 16h11
  3. Réponses: 2
    Dernier message: 19/04/2007, 16h59
  4. Réponses: 6
    Dernier message: 15/06/2006, 10h52
  5. [hibernate] probleme de mapping un-vers-plusieurs
    Par Elmilouse dans le forum Hibernate
    Réponses: 2
    Dernier message: 12/04/2006, 13h37

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