Spring JDBC BeanPropertyRowMapper oui non ('Y','N') boolean des propriétés du bean
J'ai une classe avec une chaîne de caractères, int et les champs booléens. J'ai les getters et setters déclarés.
public class SomeClass {
private int id;
private String description;
private boolean active;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
Je suis BeanPropertyRowMapper pour obtenir tous les objets de et Oracle DB.
@Override
public List<Destination> getAll() {
List<SomeClass> objs = jdbcTemplate.query(
myQuery, new BeanPropertyRowMapper<SomeClass>(SomeClass.class));
return objs;
}
Si le débogage est activé que je vois:
[3/14/13 10:02:09:202 EDT] 00000018 SystemOut O DEBUG BeanPropertyRowMapper - Mapping column 'ID' to property 'id' of type int
[3/14/13 10:02:09:202 EDT] 00000018 SystemOut O DEBUG BeanPropertyRowMapper - Mapping column 'DESCRIPTION' to property 'description' of type class java.lang.String
Et puis il échoue en essayant de la carte active. Active est définie comme 1 byte CHAR dans la base de données avec des valeurs comme " Y " ou "N". Quelle est la meilleure façon d'utiliser BeanPropertyRowMapper et convertir des valeurs telles que 'Y' et 'N' boolean?
- Vous êtes mieux d'écrire votre propre personnalisé RowMapper que d'essayer de trouver pourquoi le Printemps ne peut pas convertir boolean Y boolean true. Ou de modifier votre base de données de cartographie.
- Merci pour vos infos. Comment puis-je modifier la base de données de cartographie pour résoudre ce depuis oracle n'ont pas de type booléen? Je pense qu'il y a de la valeur à l'aide de beanpropertyrowmapper, car il permet d'économiser beaucoup de code réutilisable surtout si vous avez beaucoup d'objets du domaine. Il aide à passer plus de temps et de se concentrer sur la logique métier de dataaccess.
- Ouais, je viens de remarquer que l'Oracle n'a pas de type booléen. J'ai lu sur
BeanPropertyRowMapper
et apparemment c'était censé être (et l'est?) fixe dans Printemps 2.5.2. Vous pourriez avoir à jouer avec lesBeanPropertyRowMapper
méthodes bien. - Salut @Sotirios, merci pour pointer dans la bonne direction. Voir ma solution ci-dessous. Commentaires de bienvenue.
Vous devez vous connecter pour publier un commentaire.
Alors j'ai trouvé comment faire cela. J'ai étendu BeanPropertyRowMapper et gestionnaire les types boolean par le biais de certains de code personnalisé avant de transférer le contrôle à beanpropertyrowmapper pour le reste des types de données.
Remarque: Cela fonctionne pour moi parce que j'utilise oracle et tous les 'boolean' type des colonnes sont des chaînes de caractères avec 'y','oui','n' & 'non' type de valeurs.
Ceux qui utilisent numérique de 1,0 ou d'autres formats pourraient potentiellement améliorer en le rendant générique à travers un objet oui la carte et obtenir des objets de jeu de résultats et à la recherche dans cette carte. Espérons que cela aide quelqu'un d'autre dans une situation comme la mienne.
BeanPropertyRowMapper
permettra de convertir les valeurs enBoolean
objet avec0=false
et1=true
. Juste essayé et ça marche.Ce blog a plus d'informations, ainsi que des exemples de code en Java et C avec de l'OCCI.
Vieille question, mais vous pouvez faire quelque chose comme
Comme l'a souligné Harikumar,
BeanPropertyRowMapper
n'en fait convertir 0 et 1 pour les valeurs booléennes. Je ne pouvais pas trouver toute la documentation à l'appui, mais c'est en fait le cas actuel.Donc, une solution qui ne vous obligent pas à étendre
BeanPropertyRowMapper
serait pour décoder votre colonne dans ces valeurs: