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

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    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 sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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 régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    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 régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    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 régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    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 régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    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"

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Excellente suggestion !

    Je tâche de le faire au plus vite.

    Pour parler un peu plus de cette application, il s'agit d'une architecture 3 Tiers en Java 1.5, utilisant Struts 1.3.10 et Hibernate 3.0, la base de données est en MySQL 5.0. Le plus simple pour moi est d'adapter ton code rapide sur le plug-in (méthode exécutée au lancement du serveur Tomcat).

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par DomIII Voir le message
    Le plus simple pour moi est d'adapter ton code rapide sur le plug-in (méthode exécutée au lancement du serveur Tomcat).
    Non, non !

    Le but est justement de ne pas avoir un contexte génant.
    Donc pas de Tomcat pas de web, juste un Main classique.

    Regarde la doc hibernate si tu ne sais comment faire : http://www.hibernate.org/docs

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Hélas, le problème persiste... (si j'ose dire ! )

    J'ai donc créé un simple projet comme tu l'as conseillé, j'ai donc créé une classe avec l'environnement minimum nécessaire. La requête SQL ne veut pas s'exécuter...

    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
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Configuration configuration;
    		Session session;
    		SessionFactory sessionFactory;
    		try {
    			configuration = new Configuration();
    			sessionFactory = configuration.configure().buildSessionFactory();
    			session = sessionFactory.openSession();
    			SQLQuery sql = session.createSQLQuery("select journee from rencontre");
    			sql.addEntity("ren", Rencontre.class);
    			List<Integer> l = sql.list();
     
    		} catch (Exception e) {
    			System.out.println(e.toString());
    		}
    		System.out.println("FIN !");
    	}
    Toujours la même exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Hibernate: select rencontre.JOURNEE from RENCONTRE rencontre
    org.hibernate.exception.GenericJDBCException: could not execute query

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    Par défaut
    y'a pas toute la stackstrace ?
    Peux tu nous donner toute la log d'erreur pour voir ce qui dérange Mr Hibernate.

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Voilà, voilà, c'est la même stack que là-haut :-)

    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
     
    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate: select journee from rencontre
    Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not execute query
    	at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
    	at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    	at org.hibernate.loader.Loader.doList(Loader.java:1596)
    	at org.hibernate.loader.Loader.list(Loader.java:1577)
    	at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:112)
    	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1414)
    	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:153)
    	at Test.main(Test.java:27)
    Caused by: java.sql.SQLException: Column 'OID0_' not found.
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    	at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1144)
    	at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:3001)
    	at org.hibernate.type.LongType.get(LongType.java:26)
    	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:77)
    	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:68)
    	at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:759)
    	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:292)
    	at org.hibernate.loader.Loader.doQuery(Loader.java:412)
    	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
    	at org.hibernate.loader.Loader.doList(Loader.java:1593)
    	... 5 more

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    Par défaut
    Le "ren" n'est rataché à rien, utilise plutôt ce simple select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    SQLQuery sql = session.createSQLQuery("SELECT * FROM Rencontre");
    sql.addEntity(Rencontre.class);
    List<Rencontre> l = sql.list();
    EDIT : Mets hibernate.show_sql=true qu'on voit exactement ce que c'est cette colonne

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Tout à fait, lorsqu'on sélectionne tous les champs, cela se passe bien.

    Je viens de me taper la documentation, il semblerait qu'il n'est pas permis du mettre du véritable SQL, il est nécessaire d'apporter quelques modifications. Le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    			StringBuffer q = new StringBuffer();
    			q.append("select {ren.*} ");
    			q.append("from RENCONTRE {ren}");
    			SQLQuery sql = session.createSQLQuery(q.toString());
    			sql.addEntity("ren", Rencontre.class);
    			List<Integer> l = sql.list();
    Cependant, si je restreins la sélection, ça plante derechef...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			q.append("select ren.JOURNEE as {ren.journee} ");
    			q.append("from RENCONTRE {ren}");
    Toujours la même exception :
    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
     
    Hibernate: select ren.JOURNEE as journee0_0_ from RENCONTRE ren
    Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not execute query
    	at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
    	at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    	at org.hibernate.loader.Loader.doList(Loader.java:1596)
    	at org.hibernate.loader.Loader.list(Loader.java:1577)
    	at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:112)
    	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1414)
    	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:153)
    	at Test.main(Test.java:30)
    Caused by: java.sql.SQLException: Column 'OID0_' not found.
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    	at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1144)
    	at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:3001)
    	at org.hibernate.type.LongType.get(LongType.java:26)
    	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:77)
    	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:68)
    	at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:759)
    	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:292)
    	at org.hibernate.loader.Loader.doQuery(Loader.java:412)
    	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
    	at org.hibernate.loader.Loader.doList(Loader.java:1593)
    	... 5 more

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par sebastien.moratinos Voir le message
    EDIT : Mets hibernate.show_sql=true qu'on voit exactement ce que c'est cette colonne
    Cette option est effectivement activée, elle donne la ligne suivante lors de l'exception.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hibernate: select ren.JOURNEE as journee0_0_ from RENCONTRE ren

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    Par défaut
    le nom des colonnes OID, ça ne me plait pas...

    Tu utilises quoi comme version de mysql ?

  16. #16
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    J'utilise MySQL 5.0...

    Je suis en train de lire la doc de Hibernate, j'ai trouvé quelque chose...

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Ca y eeeeeeeeest !!!

    D'après la documentation, le code utilisé avec addEntity sert pour les jointures... et ne pouvait me servir ici.

    Alors, il suffit de prendre le code suivant, et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    			StringBuffer q = new StringBuffer();
    			q.append("select distinct(journee) ");
    			q.append("from RENCONTRE");
    			SQLQuery sql = session.createSQLQuery(q.toString());
    			sql.addScalar("journee" , Hibernate.STRING);
    			List<String> l = sql.list();
    			for(Iterator<String> it = l.iterator(); it.hasNext();) {
    				System.out.println(it.next().toString());
    			}
    Et le fichier log :
    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
     
    Hibernate: select distinct(journee) from RENCONTRE
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Certes, je n'ai pas encore tout compris, mais il semblerait que les méthodes surchargées addScalar() permettent de manipuler du SQL natif. Dès que j'aurai un peu de temps, je me pencherai sur la doc complète.

    En tout cas merci de ton implication, c'est très sympa de ta part.

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    Par défaut
    finalement c'est toi as trouvé

    garde le Main pour tester les requêtes qui plantent, c'est super utile

  19. #19
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par sebastien.moratinos Voir le message
    finalement c'est toi as trouvé

    garde le Main pour tester les requêtes qui plantent, c'est super utile
    Très bonne idée, je n'aurais jamais pensé à une chose aussi simple.

    Merci encore d'avoir cherché avec moi.

+ 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