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

Persistance des données Java Discussion :

Sélectionner un seul champ d'une table


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut Sélectionner un seul champ d'une table
    Bonjour,

    Sans doute un problème tout simple, mais je n'y arrive pas. Je travaille sur une application Web qui gère des championnats d'un sport collectif.

    Les utilisateurs ont demandé une petite évolution : pouvoir sélectionner une journée précise à partir d'une liste déroulante (balises <select> et <option>).

    L'idée est donc de récupérer les numéros de journée en base. Je dispose de la table SQL suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    +--------------+---------+------+-----+---------+-------+
    | Field        | Type    | Null | Key | Default | Extra |
    +--------------+---------+------+-----+---------+-------+
    | OID          | int(11) | NO   | PRI | NULL    |       |
    | OID_PERSONNE | int(11) | YES  | MUL | NULL    |       |
    | OID_EQUIPE_R | int(11) | YES  | MUL | NULL    |       |
    | OID_EQUIPE_V | int(11) | YES  | MUL | NULL    |       |
    | JOURNEE      | int(11) | YES  |     | NULL    |       |
    | SCORE_R      | int(11) | YES  |     | 0       |       |
    | SCORE_V      | int(11) | YES  |     | 0       |       |
    | DATE_MATCH   | date    | NO   |     | NULL    |       |
    +--------------+---------+------+-----+---------+-------+
    Pour récupérer des rencontres sur une journée désignée, voici ce que je fais sous Hibernate :
    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
     
    	public static ArrayList<Rencontre> lireRencontres(int numJournee) {
    		if (numJournee == Constantes.UNDEFINED_INT)
    			return null;
    		List<Rencontre> listeR;
    		Criteria c = session.createCriteria(Rencontre.class);
    		c.add(Restrictions.eq("journee", numJournee));
    		listeR = c.list();
    		if (listeR == null)
    			return null;
    		ArrayList<Rencontre> uneListe = new ArrayList<Rencontre>();
    		Iterator<Rencontre> it = listeR.iterator();
    		while(it.hasNext()) {
    			Rencontre r = it.next();
    			r.chargerLabels();
    		}
    		return uneListe;
    	}
    Ma question : en partant de ce code, existe un moyen simple de récupérer la liste de toutes les valeurs JOURNEE de la table RENCONTRE, sachant qu'il faut employer la contrainte DISTINCT ?

    En SQL simple, cela donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT(JOURNEE) FROM RENCONTRE;
    Merci par avance de votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    avez vous essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct(rencontre.journee) from Rencontre rencontre
    ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    avez vous essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct(rencontre.journee) from Rencontre rencontre
    ?
    Hélas, ça ne fonctionne pas... Une exception est levé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
    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
     
    Hibernate: select distinct(rencontre.JOURNEE) from RENCONTRE rencontre
    2 janv. 2011 12:44:58 org.hibernate.util.JDBCExceptionReporter logExceptions
    ATTENTION: SQL Error: 0, SQLState: S0022
    2 janv. 2011 12:44:58 org.hibernate.util.JDBCExceptionReporter logExceptions
    GRAVE: Column 'OID0_' not found.
    org.hibernate.exception.GenericJDBCException: could not execute query
    2 janv. 2011 12:44:58 org.apache.struts.util.PropertyMessageResources loadLocale
    ATTENTION:   Resource org/apache/struts/action/ActionResources_fr_FR.properties Not Found.
    2 janv. 2011 12:44:58 org.apache.struts.util.PropertyMessageResources loadLocale
    ATTENTION:   Resource org/apache/struts/action/ActionResources_fr.properties Not Found.
    2 janv. 2011 12:44:58 org.apache.catalina.core.ApplicationContext log
    GRAVE: action: null
    java.lang.NullPointerException
    	at metier.plugin.DemarragePlugIn.init(DemarragePlugIn.java:34)
    	at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:884)
    	at org.apache.struts.action.ActionServlet.init(ActionServlet.java:356)
    	at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
    	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
    	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
    	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3025)
    	at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:432)
    	at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1278)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1570)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1559)
    	at java.lang.Thread.run(Unknown Source)
    2 janv. 2011 12:44:58 org.apache.catalina.core.ApplicationContext log
    INFO: La servlet action est marqué comme indisponible
    2 janv. 2011 12:44:58 org.apache.catalina.core.StandardContext loadOnStartup
    GRAVE: La servlet /Champ7 a généré une exception "load()"
    javax.servlet.UnavailableException
    	at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:893)
    	at org.apache.struts.action.ActionServlet.init(ActionServlet.java:356)
    	at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
    	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
    	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
    	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3025)
    	at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:432)
    	at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1278)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1570)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1559)
    	at java.lang.Thread.run(Unknown Source)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Par défaut
    Peux tu nous donner le mapping de cette table ?

    Pourquoi ton ORM cherche la colonne : OID0_
    GRAVE: Column 'OID0_' not found.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Citation Envoyé par sebastien.moratinos Voir le message
    Peux tu nous donner le mapping de cette table ?

    Pourquoi ton ORM cherche la colonne : OID0_
    Mais certainement

    Voici la table SQL (desc RENCONTRE) :
    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
     
    mysql> desc rencontre;
    +--------------+---------+------+-----+---------+-------+
    | Field        | Type    | Null | Key | Default | Extra |
    +--------------+---------+------+-----+---------+-------+
    | OID          | int(11) | NO   | PRI | NULL    |       |
    | OID_PERSONNE | int(11) | YES  | MUL | NULL    |       |
    | OID_EQUIPE_R | int(11) | YES  | MUL | NULL    |       |
    | OID_EQUIPE_V | int(11) | YES  | MUL | NULL    |       |
    | JOURNEE      | int(11) | YES  |     | NULL    |       |
    | SCORE_R      | int(11) | YES  |     | 0       |       |
    | SCORE_V      | int(11) | YES  |     | 0       |       |
    | DATE_MATCH   | date    | NO   |     | NULL    |       |
    +--------------+---------+------+-----+---------+-------+
    8 rows in set (0.01 sec)
    Et le mapping sous Hibernate, le fichier Rencontre.hbm.xml :
    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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping>
    	<class name="metier.bean.Rencontre" table="RENCONTRE">
    		<id name="OID" column="OID">
    			<generator class="increment"/>
    		</id>
    		<property name="OID_Personne"/>
    		<property name="OID_Equipe_R"/>
    		<property name="OID_Equipe_V"/>
    		<property name="journee"/>
    		<property name="score_r" column="SCORE_R"/>
    		<property name="score_v" column="SCORE_V"/>
    		<property name="date_match" type="date"/>
    	</class>
    </hibernate-mapping>

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Par défaut
    Quand une requête toute simple ne fonctionne pas, j'élimine toutes les erreurs de contextes.
    C'est à dire que je lance ma requête dans un environnement ultra simplifié.
    Main + ORM + BDD + 1 seule requête et c'est tout.
    On aura une piste pour te dépanner.

    Donc voici ce qu'il faudrait que tu fasse :

    1 / Tu créer une classe "TestRequete.java" (dans la couche logique de ton Appli, c'est plus simple mais pas très beau)

    2 / Tu créer un main classique.
    Ton main charge ton EntityManager (SessionFactory si t'es sous hibernate).
    Puis exécute ta requête (le select distinct).
    Ensuite tu ferme l'EntityManager.
    Ca fait 10 lignes de code c'est tout.

    En norme JPA 2 ça donne :
    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
    public static void main(String[] args) {
    		EntityManagerFactory emf = Persistence.createEntityManagerFactory("unitMainTest");
    		EntityManager em = emf.createEntityManager();
    		em.getTransaction().begin();
     
    		Query query = em.createQuery("select distinct(r.journee) from Rencontre r");
    		List list = query.getResultList();
    		for (Object object : list) {
    			System.out.println(object);
    		}
     
    		em.close();
    		emf.close();
     
    	}
    3 / Configure ta persistenceUnit (config Hibernate pour toi) que j'ai appelé "unitMainTest"

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

Discussions similaires

  1. Modifier un seul champ d'une table
    Par philippef dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 17/12/2009, 20h21
  2. Réponses: 4
    Dernier message: 28/01/2009, 12h59
  3. Remplir un seul champ d'une table en une requête
    Par Lenezir dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/02/2008, 14h32
  4. comment inserer un seul champ d'une table dans une autre
    Par kesamba dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/12/2007, 04h48
  5. delete un seule champs d'une table
    Par speedylol dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/02/2006, 11h50

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