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 :

@SqlResultSetMappings avec lien sur un count


Sujet :

JPA Java

  1. #1
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut @SqlResultSetMappings avec lien sur un count
    Bonjour,

    J'ai une classe JPA, theme qui est relié à une classe question, la relation est de type OneToMany.
    Un thème peut avoir 0 ou N questions. Les deux classes existent et le lien fonctionne.
    Ce que je désire c'est avoir pour un theme (et donc ses infos) un attribut suplémentaire que me donne
    le nombre de questions liées, un count.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    NamedQueries({...
    @NamedQuery(name = "EticThemesUser.findByIdThemeCountQuestions", 
                query = "SELECT e,count(q) as nbquestions "
                        + "FROM EticThemesUser e, EticQuestionsUser q WHERE e.idTheme = :idTheme AND e.idTheme=q.idTheme GROUP BY q.idTheme")
    dans ma classes Themes
    j'ai rajouté l'attribut transient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @Transient
        private Integer nbquestions;
    puis le getter et le setter de l'attribut.
    Bizarrement, netbeans me remonte un warning sur la copie d'écran.
    Je ne sais pas si je suis sur la bonne voie.
    Images attachées Images attachées  
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    pourquoi ne pas faire :

    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
     
    @Transient
    private Integer nbquestions;
     
    @OnetoMany
    List<questions> questions;
     
    public void setQuestions(List<questions> questions)
    {
      this.questions = questions;
      nbquestions = this.questions.size();
    }
     
    //.. setter et getter sur le reste
     
    Eric

  3. #3
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut simple et efficace
    Bonjour

    Effectivement, c'est tellement simple que j'ai honte. merci.

    Par contre j'essaye de faire la même chose par défi avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT e.*, count(d) as countQuestions FROM EticThemesUser e join e.eticQuestionsUserCollection d group by e.*
    Avec la classe Theme

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    @SqlResultSetMapping(
                name = "findByIdThemeCountQuestions",
                entities = {
            @EntityResult(entityClass = EticThemesUser.class)
        },
                columns = {
            @ColumnResult(name = "countQuestions")})
    @Entity
    @Table(name = "ETIC_THEMES_USER")
    @XmlRootElement
    public class EticThemesUser implements Serializable {
        private static final long serialVersionUID = 1L;
     
        // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
        @Id
        @Basic(optional = false)
        @NotNull
        @Column(name = "ID_THEME")
        private BigDecimal idTheme;
        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 250)
        @Column(name = "LIBELLE_THEME")
        private String libelleTheme;
        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 20)
        @Column(name = "DEGRE")
        private String degre;
        @Basic(optional = false)
        @NotNull
        @Column(name = "ORDRE")
        private BigInteger ordre;
        @Basic(optional = false)
        @NotNull
        @Column(name = "ACTIF")
        private short actif;
        @Size(max = 500)
        @Column(name = "TOOLTIP")
        private String tooltip;
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "idTheme")
        private Collection<EticQuestionsUser> eticQuestionsUserCollection;
        @Transient
        private Integer countQuestions;
     
        public EticThemesUser(BigDecimal idTheme) {
            this.idTheme = idTheme;
        }
     
         public Integer getCountQuestions() {
            return countQuestions;
        } ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00905: mot-clé absent
    Error Code: 905
    Call: SELECT e.*, count(d) as countQuestions FROM EticThemesUser e join e.eticQuestionsUserCollection d group by e.*
    j'utilise EclipseLink
    Est ce que cela parle ?

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

Discussions similaires

  1. liste déroulante avec lien sur autre fichier
    Par orionis1 dans le forum Excel
    Réponses: 6
    Dernier message: 14/01/2008, 14h56
  2. ruban excel avec lien sur une feuille du classeur excel 2007
    Par corbisier dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/09/2007, 15h00
  3. [Conception] Mail avec lien sur la BDD
    Par grumly22 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 23/05/2006, 15h06
  4. pb avec lien sur la meme page
    Par kivoch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/01/2006, 16h34

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