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 :

Mapping domaine de valeur


Sujet :

JPA Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut Mapping domaine de valeur
    Bonjour,

    j'ai la class suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Entity
    @Table(name="A")
    public class A implements Serializable {
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@SequenceGenerator(name="A_ID_GENERATOR", sequenceName="A_IDSEQ")
    	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="A_ID_GENERATOR")
    	@Column(name="id")
    	private Integer Id;
     
    	@Column(name="etat_C30")
    	private String etatC30;
    	...
    Mon champ etatC30, fait en réalité référence à une autre table de domaine de valeur.
    La class est la suivante :

    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
    @Entity
    @Table(name="DomaineValeur")
    public class DomaineValeur implements Serializable {
    	//default serial version id, required for serializable classes.
    	private static final long serialVersionUID = 1L;
     
    	@Column(name="dom")
    	private Integer dom;
     
    	@Column(name="code")
    	private String code;
     
    	@Column(name="lib")
    	private String lib;
    	...
    Dans le cas de ma class A, la valeur de dom sera 30 (puisque etatC30), et le code la valeur stocké au niveau du champ dans ma class A.
    J'ai retourné le problème dans tous les sens je ne vois pas comment mapper la class DomaineValeur avec ma class A.

    D'avance merci de vos lumières.
    HadanMarv

  2. #2
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    Bonjour
    essaye ca pour voir dans ta classe A
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @ManyToOne(targetEntity=DomaineValeur.Class)
     @JoinColumn(name="etat_C30",referencedColumnName="dom")
     private Integer etatC30;

    Cordialement

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par Khaled.Noordin Voir le message
    Bonjour
    essaye ca pour voir dans ta classe A
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @ManyToOne(targetEntity=DomaineValeur.Class)
     @JoinColumn(name="etat_C30",referencedColumnName="dom")
     private Integer etatC30;

    Cordialement
    "dom" doit être @Id pour pouvoir être la cible d'un @ManyToOne.

  4. #4
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    Il me semble que si dom est unique cela fonctionne sinon
    je propose suite à ta remarque judicieuse
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @ManyToOne
     @JoinColumn(name="dv_id")
     private DomaineValeur dv;

    à la charge ensuite du developpeur de passé la requete(jpql ou criteria) qui va bien avec un parametre de 30 pour le membre a.dv.dom

    Cordialement

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 68
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par Khaled.Noordin Voir le message
    Il me semble que si dom est unique cela fonctionne sinon
    je propose suite à ta remarque judicieuse
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @ManyToOne
     @JoinColumn(name="dv_id")
     private DomaineValeur dv;

    à la charge ensuite du developpeur de passé la requete(jpql ou criteria) qui va bien avec un parametre de 30 pour le membre a.dv.dom

    Cordialement
    Bonjour
    on ne comprends pas bien... Pour cette proposition a quel niveau fais-tu le lien avec l'autre table?

  6. #6
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Integer dom = 30;
    // voici la query je passe sous silence les appel a l'EntityManager
    "select a from A a where a.dv.dom = :dom"
    // cela renvoi les A qui ont un dom de 30

    il faut aussi rajouter des @NotNull sur dom dans DomaineValeur et sur dv dans A

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Non effectivement dom n'est pas unique puisque c la représentation du domaine de valeur. Pour chaque domaine de valeur on peut avoir plusieurs valeurs.
    la clé unique de domaine de valeur est composé de dom et de code.
    Donc si je comprends pas je dois forcément passé par une requête, je veux dire écrite à la main...

  8. #8
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    unique dans notre contexte signifie que le système accepte que une seule valeur par enregistrement, et non pas que tous les enregistrements ont la même valeur, par ailleurs les constantes n'ont pas de place dans une base de données à moins d'une énumération.
    Ensuite que tu écrives ou pas de requêtes, la récupération de données dans la base passe forcement par une requête.
    L'impression que j'ai c'est que la modélisation du système que ce soit par un MCD à la merise, ou une diagramme de classe par un processus unifié est pas au point, gère bien ton analyse avant de coder tu t’épargnera beaucoup de tracas.

    Cordialement

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    tout à fait d'accord avec ton point de vue, à condition d'avoir été à la base de la réflexion ce qui n'est malheureusement pas mon cas.
    Je "débarque" sur un projet, et je dois en assurer une partie des développements et surtout une partie de l'exploitation. ce qui passe par des extractions notamment.
    Je comprends tout à fait le concept d'unicité merci de t'en soucier.
    Cependant comme mentionné dans mon message l'unicité de cette table passe par une clé composite (le dom et le code). le dom est implicite dans mon cas puisque attaché au nom de la propriété de l'objet (approche je dois dire pas terrible de mon point de vue).
    La question que je me pose de fait, est comment lancé une requête (namedquery) au moment ou je charge mon objet.

    l'idée maintenant est de rajouter une propriété à mon objet A qui serait transient et de le remplir avec une namedquery. mais comment faire cela ?

    D'avance merci de votre aide.

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Après une bonne nuit de recherche, j'ai fini par trouver :

    Qui sauve mon code, et rattrape la conception hasardeuse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trier une Map sur les valeurs de façon décroissante
    Par ddams dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 27/12/2011, 18h33
  2. Réponses: 2
    Dernier message: 11/08/2010, 20h30
  3. [Débutant] Limiter domaine de valeurs fonction 3D
    Par rv29634 dans le forum MATLAB
    Réponses: 2
    Dernier message: 28/09/2007, 16h42
  4. Mettre null dans un champ avec un domaine de valeur
    Par Kantizbak dans le forum SQL
    Réponses: 7
    Dernier message: 16/02/2005, 09h24
  5. Trier un std::map selon les valeurs plutot que les clés
    Par dj.motte dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/11/2004, 21h54

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