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 :

SQL Natif mapping de sortie


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut SQL Natif mapping de sortie
    Bonjour,

    Je voudrais lancer une requête du type :

    select name, model, speed, length, width, length * width as surface from SpaceShip
    en utilisant un code du type :

    String sql = "select name, model, speed, length, width, length * width as surface from SpaceShip";
    Query q = sessionFactory.getCurrentSession().createSQLQuery(sql);
    List<SpaceShip> = q.list();
    avec comme classe SpaceShip :


    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;


    @Entity
    public class SpaceShip{

    @Id
    @GeneratedValue
    @Column(name="ID")
    public Long id;

    @Column(name="name")
    public String name;

    @Column(name="model")
    public String model;

    @Column(name="speed")
    public String speed;

    @Column(name="length")
    public String length;

    @Column(name="width")
    public String width;
    }
    mais pour le moment je me retrouve avec un java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.toto.entities.SpaceShip


    QQ'un aurait une idée ?
    je précise que le débute

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Pour récupérer tes spaceships, il faut faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String hql = "from SpaceShip";
    Query q = sessionFactory.getCurrentSession().createQuery(hql);
    List liste = q.list();
    Les requetes native ne mappent pas sur des objet et certainement pas sur des entités.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu as une manière simple d'associer une entité à une requête native comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query query = session.createSQLQuery("select * from stock s where s.stock_code = :stockCode").addEntity(Stock.class)
    .setParameter("stockCode", "7277");
    mais dans ton cas, la dernière colonnes ne pourra pas être intégrée d'où problème...

    D'un autre côté, si tu as besoin de cette valeur calculée, il serait préférable de passer par un getter sur l'entité...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut
    Merci pour vos aides, mais ça répondait pas complètement a mes attentes.
    @tchize_ : En fait ma requête SQL est plus compliqué que cela, c'est pour ça que j'avais besoin de passer par du SQL natif.

    @OButterlin : j'avais essayé cette approche mais çà passait pas

    Voila ce que j'ai fait, c'est pas très élégant mais ca passe alors si qqu'un trouve qq chose de plus élégant de reste ouvert à proposition en vous remerciant par avance :


    Query q = sessionFactory.getCurrentSession().createSQLQuery(sql);
    q.setResultTransformer(new ResultTransformer() {

    public Object transformTuple(Object[] values, String[] colnames) {
    SpaceShipDto spaceShip= new SpaceShipDto();
    spaceShip.setId(new Long(((BigDecimal)values[0]).longValue()));
    spaceShip.setName(String.valueOf(values[1]));
    spaceShip.setModel(String.valueOf(values[2]));
    ...


    return spaceShip;
    }

    public List transformList(List arg0) {
    return arg0;
    }
    });

    List<SpaceShipDto> = q.list();

Discussions similaires

  1. Choix entre requête SQL ou mapping entre tables
    Par webfranc dans le forum Connectivité
    Réponses: 4
    Dernier message: 25/01/2011, 14h52
  2. SQL Natif petit probleme
    Par *alexandre* dans le forum Hibernate
    Réponses: 3
    Dernier message: 24/09/2008, 21h28
  3. Réponses: 4
    Dernier message: 02/06/2008, 13h14
  4. Réponses: 5
    Dernier message: 16/05/2008, 15h34
  5. SQL 2005 Fichier de Sortie d'une etape de Job
    Par geof dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/04/2008, 15h39

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