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

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

Créer une méthode qui permet de préparer un test de manière automatique


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2016
    Messages : 65
    Points : 36
    Points
    36
    Par défaut Créer une méthode qui permet de préparer un test de manière automatique
    Bonjour je veux créer une methode qui permet de préparer un test automatiquement:
    un test se compose d'un ensemble de question je veux créer un test ou les question seront affiché de maniére aléatoire (extraite de la base de donnée)
    Nom : aa.png
Affichages : 377
Taille : 36,9 Ko
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    package tn.esen.services.gestion.test;
    import java.util.List;
     
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
     
    import tn.esen.entities.Candidat;
    import tn.esen.entities.Resultat;
    import tn.esen.entities.Test;
     
    /**
     * Session Bean implementation class GestionTest
     */
    @Stateless
    public class GestionTest implements GestionTestRemote, GestionTestLocal {
    	@PersistenceContext
    	private EntityManager entityManager;
        /**
         * Default constructor. 
         */
        public GestionTest() {
            // TODO Auto-generated constructor stub
        }
    	@Override
    	public boolean addTest(Test test) {
    		try {
    			entityManager.persist(test);
    			return true;
    		} catch (Exception e) {
    			System.err.println("Impossible de créer un Test");
    		}		return false;
    	}
    	@Override
    	public boolean updateTest(Test test) {
    		try {
    			entityManager.merge(test);
    			return true;
    		} catch (Exception e) {
    			System.err.println("Impossible de mettre à jour un test");
    		}		return false;
    	}
    	@Override
    	public boolean deleteTest(Test test) {
     
    		try {
    			entityManager.remove(entityManager.merge(test));
    			return true;
    		} catch (Exception e) {
    			System.err.println("Impossible de supprimer un test");
    		}		return false;
    	}
    	@Override
    	public List<Test> readAllTest() {
    		String jpql = "select t from Test t ";
    		Query query = entityManager.createQuery(jpql);
    		return query.getResultList();		
    	}
    	@Override
    	public Test findTestById(Integer id) {
    		return (Test) entityManager.find(Test.class, id);
    	}
    	@Override
    	public List<Test> findAllTestByCandidat(Candidat candidat) {
        Query query=entityManager.createQuery("select distinct t from Test t join t.resultats r where r.candidat=:cand");
        query.setParameter("cand", candidat);
        return query.getResultList();

  2. #2
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Déjà, utilise la balise code...
    Ensuite, je ne vois pas bien l'utilité de fournir une classe de Dao. La classe Test nous serait plus utile...

    Si Test correspond a une question, recupere l'ensemble des id, puis tires en une au hasard, tout simplement. Sinon, il faut savoir ce qu'il y a dans Test...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2016
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Je suis nouveau désolé .
    la requête sera SELECT q FROM Question ORDER BY RAND() LIMIT ...;
    la méthode sera évidemment insérer dans la classe DAO du test
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    package tn.esen.entities;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
     
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
     
    import java.io.Serializable;
    import java.util.Collection;
    import java.util.Date;
    @Entity
    public class Question implements Serializable {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	@Id
    	@GeneratedValue(strategy=GenerationType.IDENTITY)
    	@Column(name="id_question")		
    	private int id;
        private String contenu;    
    	private String niveauDeDifficulte;
            private Date dateCreation;
            @OneToMany(mappedBy="question",fetch = FetchType.EAGER)
            private Collection <Reponse> reponses; 
            @ManyToOne
             private Categorie categorie;
            @ManyToOne
             private Administrateur administrateur;
            @ManyToMany(mappedBy = "questions")
            private Collection<Test> tests;
    public Question(){
    	super();
    }
     
    @Override
    public String toString() {
    	return "Question [id=" + id + ", contenu=" + contenu + ", niveauDeDifficulte=" + niveauDeDifficulte + "]";
    }
     
    public int getId() {
    	return id;
    }
     
    public void setId(int id) {
    	this.id = id;
    }
     
     
    public String getContenu() {
    	return contenu;
    }
     
    public void setContenu(String contenu) {
    	this.contenu = contenu;
    }
     
    public String getNiveauDeDifficulte() {
    	return niveauDeDifficulte;
    }
     
    public void setNiveauDeDifficulte(String niveauDeDifficulte) {
    	this.niveauDeDifficulte = niveauDeDifficulte;
    }
     
     
    public Date getDateCreation() {
    	return dateCreation;
    }
     
    public void setDateCreation(Date dateCreation) {
    	this.dateCreation = dateCreation;
    }
     
     
    public Collection<Reponse> getReponses() {
    	return reponses;
    }
     
    public void setReponses(Collection<Reponse> reponses) {
    	this.reponses = reponses;
    }
     
    public Categorie getCategorie() {
    	return categorie;
    }
     
    public void setCategorie(Categorie categorie) {
    	this.categorie = categorie;
    }
     
    public Administrateur getAdministrateur() {
    	return administrateur;
    }
     
    public void setAdministrateur(Administrateur administrateur) {
    	this.administrateur = administrateur;
    }
     
    public Collection<Test> getTest() {
    	return tests;
    }
     
    public void setTest(Collection<Test> tests) {
    	this.tests = tests;
    }
     
    public Question(String contenu, String niveauDeDifficulte, Date dateCreation) {
    	super();
    	this.contenu = contenu;
    	this.niveauDeDifficulte = niveauDeDifficulte;
    	this.dateCreation = dateCreation;
    }
     
     
     
     
     
     
    }

  4. #4
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Ce que je ferais :
    Sélectionner toute les Id de Question et les mettre dans un tableau
    Creer un Random
    A chaque question, appeler random.nextInt(tableau.length) et recuperer l'id correspodante.
    Faire un select d'une question avec l'id en parametre.

    Ca t'evite de mettre du code "metier" dans ton dao, et de garder des requetes simples. C'est l'idée que tu cherchais?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2016
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Entre autre je voulais faire ça mais je sais pas est ce qu'elle est bonne ou pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public List<Question> prepareRandomTest(int number_of_questions){ 
      String sql = "SELECT * FROM question ORDER BY RANDOM() LIMIT "+number_of_questions;
      SQLQuery query = session.createSQLQuery(sql);
      query.addEntity(Question.class);
      List<Question> results = (List<Question>)query.list();
      return result;
    }

  6. #6
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Avec postgresql, ca passe. Avec d'autre nom. Le soucis c'est que la syntaxe sql de ta requête n'est pas portable. Elle marchera avec certains sgbd mais pas avec d'autre. Donc, ca marche mais si tu faire autrelent fait le...

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/11/2015, 12h22
  2. Réponses: 1
    Dernier message: 04/07/2013, 10h23
  3. Réponses: 3
    Dernier message: 23/05/2012, 15h03
  4. [XL-2003] Créer une variable qui permet d'identifier la dernier ligne
    Par Tinien dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 13/05/2009, 11h56
  5. Réponses: 12
    Dernier message: 23/03/2006, 14h13

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