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

Développement Web en Java Discussion :

Generate Entities from table ?


Sujet :

Développement Web en Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut Generate Entities from table ?
    Bonsoir,
    je m'en remet une nouvelle fois à vous, car je bloque sur un bout de programme depuis pas mal de temps.
    Je débute en Java EE, et je galère un peu.

    En fait, j'ai créé une base de données MySQL, et dans mon projet j'ai généré les entités avec les tables existantes.
    Le petit souci, c'est que certaines tables contiennent 2 clés primaires. Dans ce cas Eclipse me génère une classe MatablePK.java en plus, ce qui semble normal.
    Mais quand j'exporte mon projet dans Jonas j'obtiens toujours l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Repeated column in mapping for entity: database.Usermovy column: movieid (should be mapped with insert="false" update="false")
    Voila par exemple des entités générés qui posent problèmes :

    Usermovy :
    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
    package database;
     
    import java.io.Serializable;
    import javax.persistence.*;
    import java.math.BigDecimal;
     
     
    /**
     * The persistent class for the usermovies database table.
     * 
     */
    @Entity
    @Table(name="usermovies")
    @NamedQuery(name="Usermovy.findAll", query="SELECT u FROM Usermovy u")
    public class Usermovy implements Serializable {
    	private static final long serialVersionUID = 1L;
     
    	// Primary keys
    	@EmbeddedId
    	private UsermovyPK id;
     
    	private String comment;
     
    	private BigDecimal rank;
     
    	//bi-directional many-to-one association to Movy
    	@ManyToOne
    	@JoinColumn(name="movieid")
    	private Movy movy;
     
    	//bi-directional many-to-one association to User
    	@ManyToOne
    	@JoinColumn(name="userid")
    	private User user;
     
    	public Usermovy() {
    	}
     
    	public UsermovyPK getId() {
    		return this.id;
    	}
     
    	public void setId(UsermovyPK id) {
    		this.id = id;
    	}
     
    	public String getComment() {
    		return this.comment;
    	}
     
    	public void setComment(String comment) {
    		this.comment = comment;
    	}
     
    	public BigDecimal getRank() {
    		return this.rank;
    	}
     
    	public void setRank(BigDecimal rank) {
    		this.rank = rank;
    	}
     
    	public Movy getMovy() {
    		return this.movy;
    	}
     
    	public void setMovy(Movy movy) {
    		this.movy = movy;
    	}
     
    	public User getUser() {
    		return this.user;
    	}
     
    	public void setUser(User user) {
    		this.user = user;
    	}
     
    }
    et UsermovyPK :
    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
    package database;
     
    import java.io.Serializable;
    import javax.persistence.*;
     
    /**
     * The primary key class for the usermovies database table.
     * 
     */
    @Embeddable
    public class UsermovyPK implements Serializable {
    	//default serial version id, required for serializable classes.
    	private static final long serialVersionUID = 1L;
     
    	@Column(insertable=false, updatable=false)
    	private int userid;
     
    	private int movieid;
     
    	public UsermovyPK() {
    	}
     
    	public int getUserid() {
    		return this.userid;
    	}
     
    	public void setUserid(int userid) {
    		this.userid = userid;
    	}
     
    	public int getMovieid() {
    		return this.movieid;
    	}
     
    	public void setMovieid(int movieid) {
    		this.movieid = movieid;
    	}
     
    	public boolean equals(Object other) {
    		if (this == other) {
    			return true;
    		}
    		if (!(other instanceof UsermovyPK)) {
    			return false;
    		}
    		UsermovyPK castOther = (UsermovyPK)other;
    		return 
    			(this.userid == castOther.userid)
    			&& (this.movieid == castOther.movieid);
    	}
     
    	public int hashCode() {
    		final int prime = 31;
    		int hash = 17;
    		hash = hash * prime + this.userid;
    		hash = hash * prime + this.movieid;
     
    		return hash;
    	}
    }
    Bien-sur la table Usermovy est lié à la table User et à la table Movy, mais je pense pas que le problème vienne de ces tables.

    Voila, si quelqu'un pourrait m'expliquer ce qui cloche je suis preneur

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Lorsque tu as une relation Many-to-one cela signifie généralement qu'il te faut une colonne dans la table source pour joindre vers la table destination.

    Tu as fait le choix d'utiliser l'une de ces colonnes comme faisant partie de ta clé primaire. De faites, une même colonne est mappée deux fois et JPA ne sait pas quel attribut servira à alimenter la colonne lors des mises à jour/insertions.

    La solution se trouve déjà sur l'attribut userid
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Merci de votre réponse.
    Du coup il faut que je modifie ma base de données, ou une modification du code peut suffir à corriger le problème ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Corrigé le code suffira.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Très bien, donc si je comprend bien, il suffit de supprimer les attributs dans une des classes ?

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    non, il faut les marquer comme non éditable comme c'est déjà le cas pour UsermovyPK.userid
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Ok, mais je vois pas trop ou je dois indiquer que c'est censé être non éditable ?

  8. #8
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Embeddable
    public class UsermovyPK {
    	@Column(insertable=false, updatable=false)
    	private int userid;
    }
    L'attribut n'est pas utilisé lors de l'insertion (insertable=false) ou lors de la mise à jour (updatable=false).
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Ok ok,
    j'ai essayé d'ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Column(insertable=false, updatable=false)
    à l'attribut movieid de la classe UsermovyPK, mais j'ai toujours la même erreur.
    Après dans ma classe Usermovy, je ne vois pas ce que je peut bloquer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Primary keys
    	@EmbeddedId
    	private UsermovyPK id;
     
    	private String comment;
     
    	private BigDecimal rank;

  10. #10
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Essaye de faire ces déclarations au niveau des jointures et non au niveau des attributs de la clé. Je ne suis pas sûr que ces déclarations soient supportés au niveau des clés.
    Théoriquement ca devrait les attributs "movy" et "user" qui devraient être les clés. Ca éviterait également la duplication des champs. Essayent de travailler de ce côté.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  11. #11
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Alors, sans chercher à modifier les clés primaires, j'ai juste ajouté la ligne pour bloquer l'édition des champs Movy et User de la classe Usermovy, et j'obtiens une nouvelle erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property: database.Usermovy.movy
    Du cou pj'ai supprimé mes classes générées, et j'ai recommencé, sauf que ce coup ci j'ai coché la case "Always generate optional JPA annotations and DLL parameters", et à ma grande surprise, le projet s'est déployé sans erreur.

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

Discussions similaires

  1. Affichage schéma dans "create entities from tables"
    Par the_cha0s dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 28/05/2014, 15h36
  2. Différences entre delete table et delete from table
    Par pegase06 dans le forum Administration
    Réponses: 3
    Dernier message: 16/02/2007, 15h25
  3. Problème avec : a,b,c IN (select a,b,c from table)
    Par Ludo49 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/03/2006, 02h32
  4. select 'detail.php?id='||ID from table;
    Par XtofRoland dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/03/2006, 10h35
  5. a,b,c NOT IN (select a,b,c from table)
    Par szdavid dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2005, 09h19

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