Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Valore Boolean e NamedQuery

    Ciao gente, ho questo problemino:
    sto lavorando con JPA e la questione è che non riesco a tirare fuori dal DB(Mysql) i record quando inserisco un where su un valore boolean.

    La query è

    codice:
    getCurrentSession().createQuery("SELECT p FROM Prestazioni p WHERE p.programmato is true and p.dataOra BETWEEN :da AND :a");

    Sul db il campo programmato è di tipo TINYINT, mente nell'entity è definito così

    codice:
    @Column(name = "programmato")
        private Boolean programmato;
    
    public Boolean getProgrammato() {
           return programmato;
        }
    
    public void setProgrammato(Boolean programmato) {
           this.programmato = programmato;
    }

    Se elimino la condizione su programmato la query funziona.

    dove sto sbagliando????

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Credo che l'errore stia qui:

    codice:
    WHERE p.programmato is true

    Non mi risulta che la sintassi da usare con i boolean differisca da quella da usarsi con qualunque altro tipo di dato per il confronto sull'uguaglianza. Si usa sempre il simbolo di uguale:

    codice:
    WHERE p.programmato = true

    O, più semplicemente, essendo di tipo boolean:

    codice:
    WHERE p.programmato

    Da quel che so l'operatore IS è "particolare" e si usa solo con NULL (nelle forme "IS NULL" o "IS NOT NULL") in quanto il confronto con NULL dà sempre esito negativo.


    Ciao.
    Ultima modifica di LeleFT; 28-03-2014 a 15:42
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Il semplice

    codice:
    where p.programma
    mi va in eccezione e

    codice:
    where p.programma = true
    non gli fa ne caldo ne freddo

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se ma se fai la query direttamente dalla console del dbms cosa ottieni?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Prova a vedere questo codice, se funziona:

    codice:
    StringBuilder sql = new StringBuilder();
    sql.append("SELECT p ");
    sql.append("FROM Prestazioni p ");
    sql.append("WHERE p.programmato = :prog and p.dataOra BETWEEN :da AND :a");
    
    TypedQuery<Prestazioni> qry = getCurrentSession().createQuery(sql.toString(), Prestazioni.class);
    qry.setParameter("prog", true);
    qry.setParameter("da", ...);
    qry.setParameter("a", ...);
    
    List<Prestazioni> lst = qry.getResultList();

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Prova a vedere questo codice, se funziona:

    codice:
    StringBuilder sql = new StringBuilder();
    sql.append("SELECT p ");
    sql.append("FROM Prestazioni p ");
    sql.append("WHERE p.programmato = :prog and p.dataOra BETWEEN :da AND :a");
    
    TypedQuery<Prestazioni> qry = getCurrentSession().createQuery(sql.toString(), Prestazioni.class);
    qry.setParameter("prog", true);
    qry.setParameter("da", ...);
    qry.setParameter("a", ...);
    
    List<Prestazioni> lst = qry.getResultList();

    Ciao.




    Scusa ma
    codice:
    getCurrentSession().createQuery
    torna un oggetto Query, come faccio a usarlo con TypedQuery

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sinceramente non so cosa sia "getCurrentSession()"... immaginavo che ritornasse un EntityManager. Se non è così, cerca di spiegare meglio... che fa "getCurrentSession()"?

    Ad ogni modo, non è quello il punto della questione... se anche hai un Query, hai comunque il metodo setParameter.


    codice:
    StringBuilder sql = new StringBuilder();
    sql.append("SELECT p ");
    sql.append("FROM Prestazioni p ");
    sql.append("WHERE p.programmato = :prog and p.dataOra BETWEEN :da AND :a");
    
    Query qry = getCurrentSession().createQuery( sql.toString() );
    qry.setParameter("prog", true);
    qry.setParameter("da", ...);
    qry.setParameter("a", ...);
    
    List<Prestazioni> lst = (List<Prestazioni>) qry.getResultList();

    Ciao.
    Ultima modifica di LeleFT; 03-04-2014 a 12:53
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.