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

JPA Java Discussion :

Type boolean ?


Sujet :

JPA Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut Type boolean ?
    Bonjour,
    j'utilise une base de données Oracle, j'ai un champ Oui ou Non,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    actif VARCHAR2(1);
    actif in ('O','N')
    comment je peux mapper ce champs en booléen ?
    existe-il le type boolean en Oracle ?
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Oracle ne dispose pas de type booléen.
    En revanche JDBC propose une conversion (source)
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    merci pour ta réponse rapide, mais c'est pas ça que je recherche
    j'ai trouvé mais je ne sais pas comment sa fonctionne avec ma table ??
    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Si tu mappes cette colonne vers un attribut de type primitif booléen, la conversion (Java -> Oracle et Oracle -> Java) se fera automatiquement comme explicité dans le lien que je t'ai donné.

    Tu cherches à mapper 'O' et 'N' vers true et false ?
    Si c'est le cas le plus simple c'est d'ajouter des getter/setter qui manipule des booléens.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    Tu cherches à mapper 'O' et 'N' vers true et false ?
    oui mon champ est soit oui soit non !!

    Si c'est le cas le plus simple c'est d'ajouter des getter/setter qui manipule des booléens.
    Aujourd'hui 11h32
    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public Boolean  getActif() {
    		if (actif == null) return null;
    	    return actif == "O" ? Boolean.TRUE : Boolean.FALSE;
    	}
     
    	public void setActif(boolean actif) {
    		 if ("null".equals(actif)) {
    		      this.actif = null;
    		    } else {
    		      this.actif = actif == true ? "O" : "N";
    		    }
    	}

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Citation Envoyé par rimas2009 Voir le message
    oui mon champ est soit oui soit non !!
    Je dirais plutôt soit 'O' soit 'N' Car si c'est juste pour faire du booléen peut importe la valeur en base. Autant utiliser le mécanisme de base.


    Version corrigée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public static final String ACTIF_VALUE_TRUE = "O";
    public static final String ACTIF_VALUE_FALSE = "N";
    public Boolean  isActif() {
      if (actif == null) return null;
      if (ACTIF_VALUE_TRUE.equals(actif)) return Boolean.TRUE;
      if (ACTIF_VALUE_FALSE.equals(actif)) return Boolean.FALSE;
      // Unexpected value (use default)
      actif = null;
      return null;
    }
     
    public void setActif(Boolean isActif) {
      if (isActif == null) actif = null;
      else if (isActif)  actif = ACTIF_VALUE_TRUE;
      else actif = ACTIF_VALUE_FALSE;
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    j'ai une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .........
     org.hibernate.exception.GenericJDBCException: could not load an entity:MaTable (classe de mapping qui contient actif)
    .........
    java.sql.SQLException: Echec de conversion dans la représentation interne

  8. #8
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Créé une propriété de type String (ou Character si c'est du char(1)) que tu mappes normalement avec ta colonne. Au passage tu peux marquer les getter/setter avec @Deprecated pour ne pas être tenté de les utiliser depuis ton code client.

    Et ensuite tu créé une nouvelle paire de getter/setter pour un Boolean qui font ce que t'as dit Nemek mais qui pointent vers la propriété mappée.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    mais comme ça j'aurais 2 setter du meme nom ????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setActif pour la propriété mappé
    et
    setActif pour le boolean

  10. #10
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    adapte le nom :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MonEntite {
      String rawActif
      @Deprecated
      protected String getRawActif() { return rawActif; }
      @Deprecated
      // Tu peux également gérer les valeurs bizzarres ici
      protected void setRawActif(String actif) { rawActif = actif; }
      public Boolean isActif() { ... }
      public void setActif(Boolean actif) { ... }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    sa fonctionne pas
    ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @Column(name = "ACTIF",  nullable = false, length = 1)
    	@Deprecated
    	public String getActif() {
    		return actif;
    	}
     
    	@Deprecated
    	public void setActif(String actif) {
    		this.actif = actif;
    	}
     
    	public Boolean  isActivate() {
    	  if (actif == null) return null;
    	  if (ACTIF_VALUE_TRUE.equals(actif)) return Boolean.TRUE;
    	  if (ACTIF_VALUE_FALSE.equals(actif)) return Boolean.FALSE;
    	  // Unexpected value (use default)
    	  actif = null;
    	  return null;
    	}
     
    	public void setActivate(Boolean isActif) {
    	  if (isActif == null) actif = null;
    	  else if (isActif)  actif = ACTIF_VALUE_TRUE;
    	  else actif = ACTIF_VALUE_FALSE;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00904: "UTILISATEU0_"."ACTIVATE" : identificateur non valide

  12. #12
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Rajoute un sur isActivate() et appelle setActif() getActif() au lieu de passer directement par le champ.

Discussions similaires

  1. Type boolean et Auto Incrémente
    Par mouloudéen dans le forum SQL
    Réponses: 2
    Dernier message: 03/04/2007, 22h42
  2. Réponses: 1
    Dernier message: 16/03/2007, 12h46
  3. [oracle 8i] type boolean
    Par yasinfo dans le forum Oracle
    Réponses: 6
    Dernier message: 18/06/2006, 17h48
  4. Type boolean MIN_VALUE || MAX_VALUE
    Par bxflash dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2005, 14h52
  5. [débutant] type boolean!!!
    Par just1980 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/08/2005, 11h47

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