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
?
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