2016-07-13 1 views
1

J'utilise ORMLite avec une base de données H2 en Java, et j'ai une classe avec un champ booléen. Lorsque j'utilise une requête brute et le mappeur de lignes brutes par défaut du DAO pour extraire un objet de cette classe de la base de données, la valeur du champ booléen dans l'objet retourné est toujours false. (Les valeurs sont stockées en tant que type TINYINT dans la base de données.)Comment extraire les valeurs de champs booléens correctes avec une requête ORMLite brute?

Voici un exemple:

public class BooleanPersistenceWithRawQueries { 

    @DatabaseTable 
    public static class George { 
     @DatabaseField(generatedId = true) public Integer id; 
     @DatabaseField public boolean curious; 
    } 

    public static void main(String[] args) throws Exception { 
     ConnectionSource connectionSource = new JdbcConnectionSource("jdbc:h2:mem:"); 
     Dao<George, ?> dao = DaoManager.createDao(connectionSource, George.class); 
     TableUtils.createTable(connectionSource, George.class); 
     George g = new George(); 
     g.curious = true; 
     dao.create(g); 
     George h = dao.queryRaw("SELECT * FROM George", dao.getRawRowMapper()).getFirstResult(); 
     System.out.println("curious = " + h.curious + " should be " + g.curious); 
    } 
} 

La sortie est

curious = false should be true 

Je sais que je pourrais sous-classe RawRowMapperImpl pour remplacer ce comportement, mais existe-t-il un moyen intégré pour configurer les mappages d'objets (tels qu'un paramètre d'annotation @DatabaseField) de sorte que les valeurs TINYINT de 1 soient analysées comme true?

Répondre

0

C'est un vieux problème, mais peut-être que cela aiderait quelqu'un. Utiliser le type de données dans la notation param

@DatabaseField(dataType = DataType.BOOLEAN) 
+0

Je reçois toujours le même résultat, dans ormlite 4.48 et 5.0. Le problème, autant que je peux le dire, est que le convertisseur de champ utilise 'BooleanObjectType.parseDefaultString', qui utilise' Boolean.parseBoolean', qui analyse "1" comme faux. – user4851