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

Hibernate Java Discussion :

HibernateException - Missing column


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut HibernateException - Missing column
    Bonjour,

    J'ai crée ma base de données et créer mes entités hibernate pour mapper ma base. J'ai deux tables :

    equipes

    idEquipe
    nomEquipe

    matchs

    idMatch
    idEquipeDomicile
    idEquipeExterieur
    score

    Voici les classes :

    Equipe
    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
     
    @Entity
    @Table(name="equipes")
    public class Equipe {
     
    	public Integer idEquipe;
    	public String nom;
     
    	public Equipe() {}
     
    	public Equipe(Integer idEquipe, String nom) {
    		super();
    		this.idEquipe = idEquipe;
    		this.nom = nom;
    	}
     
    	@Id
    	@Column(name = "idEquipe", unique = true, nullable = false, precision = 22, scale = 0)
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	public Integer getIdEquipe() {
    		return idEquipe;
    	}
     
    	public void setIdEquipe(Integer idEquipe) {
    		this.idEquipe = idEquipe;
    	}
     
    	@Column(name="nomEquipe", length=40)
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    }
    Match
    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
     
    @Entity
    @Table(name="Matchs")
    public class Match implements Serializable {
     
    	public Integer idMatch;
    	public Equipe equipeDomicile;
    	public Equipe equipeExterieure;
    	public Integer score;
     
    	public Match() {}
     
    	public Match(Integer idMatch, Equipe equipeDomicile,
    			Equipe equipeExterieure, Integer score) {
    		super();
    		this.idMatch = idMatch;
    		this.equipeDomicile = equipeDomicile;
    		this.equipeExterieure = equipeExterieure;
    		this.score = score;
    	}
     
    	@Id
    	@Column(name = "idMatch", unique = true, nullable = false, precision = 22, scale = 0)
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	public Integer getIdMatch() {
    		return idMatch;
    	}
     
    	public void setIdMatch(Integer idMatch) {
    		this.idMatch = idMatch;
    	}
     
    	@ManyToOne(fetch=FetchType.LAZY)
    	@JoinColumn(name="idEquipe", nullable=false, insertable=false, updatable=false)
    	public Equipe getEquipeDomicile() {
    		return equipeDomicile;
    	}
     
    	public void setEquipeDomicile(Equipe equipeDomicile) {
    		this.equipeDomicile = equipeDomicile;
    	}
     
    	@ManyToOne(fetch=FetchType.LAZY)
    	@JoinColumn(name="idEquipe", nullable=false, insertable=false, updatable=false)
    	public Equipe getEquipeExterieure() {
    		return equipeExterieure;
    	}
     
    	public void setEquipeExterieure(Equipe equipeExterieure) {
    		this.equipeExterieure = equipeExterieure;
    	}
     
    	@Column(name="score", nullable=false)
    	public Integer getScore() {
    		return score;
    	}
     
    	public void setScore(Integer score) {
    		this.score = score;
    	}
    }
    Mais voilà j'ai une erreur qui se lance lorsque j'ouvre pour la première fois ma page d'accueil:

    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
     
    org.hibernate.HibernateException: Missing column: idEquipe in database.matchs
    org.hibernate.mapping.Table.validateColumns(Table.java:276)
    	org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1343)
    	org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
    	org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:378)
    	org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
    	org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:813)
    	org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:731)
    	org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1454)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1392)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
    	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:289)
    	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:286)
    	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:188)
    	org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
    	org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1299)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1061)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
    	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:289)
    	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:286)
    	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:188)
    	org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:543)
    	org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:730)
    	org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:387)
    	org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:447)
    	org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:342)
    	org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:308)
    	org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
    	javax.servlet.GenericServlet.init(GenericServlet.java:212)
    	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
    	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    	java.lang.Thread.run(Unknown Source)
    Merci d'avance pour 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
    Il manque une colonne idEquipe dans ta table match. D'ailleurs je vois que tu as mappé deux propriétés sur la même colonne, ce qui n'est surement pas ce qui est voulu.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Mais si idEquipeExterieure et idEquipeDomicile sont des clés étrangères qui sont liés à idEquipe de la table Equipe comment je dois m'y prendre pour le transcrire au niveau du mapping ?

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @ManyToOne(fetch=FetchType.LAZY)
    	@JoinColumn(name="idEquipeDomicile", nullable=false, insertable=false, updatable=false)
    	public Equipe getEquipeDomicile() {
    		return equipeDomicile;
    	}

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par la_praline Voir le message
    Mais si idEquipeExterieure et idEquipeDomicile sont des clés étrangères qui sont liés à idEquipe de la table Equipe comment je dois m'y prendre pour le transcrire au niveau du mapping ?
    Le nom de colonne que vous donnez dans le "name" du JoinColumn est le nom de la colonne du côté du Many pas du côté du One : celui-là est toujours connu puisque cela sera la PK de la table visée.

    Donc comme dit par tchize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @JoinColumn(name="idEquipeDomicile"
    et pour éviter toute confusion, mettez aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @JoinColumn(name="idEquipeExterieure"
    sur l'autre ManyToOne.

    Vous auriez aussi pû faire un @ManyToMany de Equipe sur lui-même avec Match comme entité intersection sur une collection simple, ou deux Map<Match,Integer> dans Equipe l'un étant les scores à domicile et l'autre les scores à l'extérieur.

    Par ailleurs : comment comptez-vous encodez les résultats correctement avec un seul entier pour le score ? Faire du Integer un "fixed point" ?
    Et il manque aussi la date dans Match et peut-être pouvoir gérer le cas où le match est remis (et décrire le pourquoi) avec un lien vers le Match de remise… (et dans ce cas décider si dans la chaîne des matchs vous chainez en avant ou en arrière dans le temps) et décider comment vous décrivez un forfait de l'une des deux équipes.
    Tout cela dépend de votre cahier des charges, mais si l'on prend pour hypothèse que vous devez modéliser la "réalité"…

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    un fixed point ?

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par la_praline Voir le message
    un fixed point ?
    entre guillemets le "fixed point", exemple :
    dans un entier de 64 bits, mettre une valeur de 32 bits dans les bits 63-32 et l'autre dans les bits 31-0, ce qui revient à choisir de représenter les 2 nombres comme étant l'un la partie entière et l'autre la pseudo-partie décimale d'un nombre dont la virgule est placée à la position 32.

    À strictement parler un fixed point c'est un nombre pour la virgule est toujours au même endroit (donc contrairement à un floating point on ne doit pas retenir la position de celle-ci dans le format du nombre lui-même) et que l'on stocke dans un vecteur de bits (votre Integer) et dont on peut extraire partie entière et partie décimale par des opérations de masquage de bits et de shift.

    Mais c'est juste pour attirer votre attention sur le fait qu'un seul Integer pour "score" ne permet pas de représenter la réalité complète, et que dans votre exemple de Match est donc au mieux incomplet (si vous utilisez score comme un vecteur de bits pour y mettre plus d'information), au pire erroné si vous ne vous rendez pas compte que votre modèle est incomplet…

    Et notez que si vous devez adaptez votre exemple au rugby (et sans doute d'autres sports ont cette caractéristique), le nombre de points rapportés est lié à d'autres facteurs que simplement la victoire, le partage, la défaite, … il y a des règles concernant des "bonus"… (et ces règles peuvent dépendre du sport en lui-même… ou de la compétition visée… votre Match ne fait référence à aucune notion de Compétition, donc votre modélisation ne servira que pour un seul "tournoi" …)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/05/2009, 11h58
  2. XLIB: extension GLX missing on display "...
    Par vince3320 dans le forum OpenGL
    Réponses: 9
    Dernier message: 29/07/2004, 15h48
  3. Pb avec DROP COLUMN sous SQL Server 2000
    Par debailleul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/03/2004, 14h38
  4. Alter column => passer de NOT NULL à NULL
    Par JohnGT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/10/2003, 11h16
  5. Insert ds une column identity
    Par Trahwn dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 06/10/2003, 15h14

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