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

JPA Java Discussion :

EJB Entity Bean


Sujet :

JPA Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut EJB Entity Bean
    Bonsoir,

    je veux créer 5 entity bean, donc 5 classes java, ces classes ont des correspondances, c'est-à-dire qu'il y des relations 0,n par exemple, et dans l'une des classes j'ai des collections java plus exactement j'ai des java.util.Set <modification> modification, et je veux faire des @OneToMany et des @ManyToOne mais j'ai une erreur lors du déploiement du jar sous JBoss.

    Voici mes 2 classes :

    Document.java
    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
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
     
    package ejb;
     
    import java.io.Serializable;
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
     
    import javax.persistence.CascadeType;
    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.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.OneToMany;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
     
     
    import org.jboss.ejb3.naming.client.java.javaURLContextFactory;
     
    /* cette classe représente un document */
     
     
    @Entity
    public class Document implements Serializable{
    	// les variables correspondent aux colonnes de la table Document de la base de données
    	@Column(name = "nom", nullable = false)
    	private String nom; // le nom du document
    	@Column(name = "date_creation", nullable = false)
    	private java.util.Date date_creation; // la date de création du document
    	@Column(name = "emplacement", nullable = false)
    	private String emplacement; // l'emplacement du document
    	@Column(name = "modification", nullable = false)
    	@OneToMany (mappedBy = "document")
    	private java.util.Set<Modification> Modification; // la date de dernière modification
    	//@Column(name = "tag", nullable = false)
    	//private java.util.Set<Tag> tag; // la liste des tags représentant ce document
    	private static final long serialVersionUID = -728268157L; 
    	@Column(name = "id", nullable = false)
    	private Long id; // l'identifiant obligatoire pour la table
    	@Column(name = "typeDocument", nullable = false)
    	private TypeDocument typeDocument; // le type du document : ex technique, commercial ..
     
     
    	// le constructeur qui est vide
     
    	public Document() {
    		super();
    	}
     
     
    	// redéfinition de la méthode ToString
     
    	public String toString() {
    		return "Document" + " nom=" + nom + " date_creation=" + date_creation
    				+ " emplacement=" + emplacement + " id=" + id;
    	}
     
     
    	// les getters et setters
     
    	public String getNom() {
    		return this.nom;
    	}
     
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
     
    	public java.util.Date getDate_creation() {
    		return this.date_creation;
    	}
     
     
    	public void setDate_creation(java.util.Date date_creation) {
    		this.date_creation = date_creation;
    	}
     
     
    	public String getEmplacement() {
    		return this.emplacement;
    	}
     
     
    	public void setEmplacement(String emplacement) {
    		this.emplacement = emplacement;
    	}
     
    	//@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="document", targetEntity=Modification.class)
    	public Collection<Modification> getModification() {
    		if (Modification == null) {
    			Modification = new java.util.HashSet<Modification>();
    		}
    		return Modification;
    	}
     
     
    	public void setModification(java.util.Set<Modification> Modification) {
    		this.Modification = Modification;
    	}
     
     
    	public void addModification(Modification Modification) {
    		getModification().add(Modification);
    	}
     
     
    	public void removeModification(Modification Modification) {
    		getModification().remove(Modification);
    	}
     
     
     
     
    	//@ManyToMany(cascade=CascadeType.ALL, mappedBy="tags", targetEntity=Tag.class)
    	//@JoinTable(name="document_tag")
    	/*public java.util.Set<Tag> getTag() {
    		if (tag == null) {
    			tag = new java.util.HashSet<Tag>();
    		}
    		return tag;
    	}
     
     
    	public void setTag(java.util.Set<Tag> tag) {
    		this.tag = tag;
    	}
     
     
    	public void addTag(Tag tag) {
    		getTag().add(tag);
    	}
     
     
    	public void removeTag(Tag tag) {
    		getTag().remove(tag);
    	}
    */
    	@Id // tag définissant la clé primaire
    	@GeneratedValue(strategy=GenerationType.AUTO) // tag indiquant que la clé est auto générée
    	public Long getId() {
    		return this.id;
    	}
     
     
    	public void setId(Long id) {
    		this.id = id;
    	}
     
    	//@OneToOne(mappedBy="typeID")
    	public TypeDocument getTypeDocument() {
    		return this.typeDocument;
    	}
     
     
    	public void setTypeDocument(TypeDocument typeDocument) {
    		this.typeDocument = typeDocument;
    	}
     
     
     
    }
    modification.java
    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
     
    package ejb;
     
    import java.io.Serializable;
     
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToOne;
     
    /* cette classe représente une modification d'un document */
     
    @Entity
    public class Modification implements Serializable {
    	// les variables correspondent aux colonnes de la table Modification de la base de données
    	private java.util.Date date; // la date de modification
    	private String commentaire; // le commentaire pour expliqué ce qu'il a été fait comme modification
    	@ManyToOne
    	@JoinColumn(name="document", nullable = false) 
    	private Document document; // représente le document qui a été modifié
    	private User user; // représente le user qui a fait cette modification
    	private static final long serialVersionUID = 258313988L;
    	private Long id; // identifiant obligatoire pour la table
     
    	// redéfinition de la méthode toString
     
    	public String toString() {
    		return "Modification" + " date=" + date + " commentaire=" + commentaire
    				+ " id=" + id;
    	}
     
    	// le constructeur vide
     
    	public Modification() {
    		super();
    	}
     
    	// les getters et les setters
     
    	public java.util.Date getDate() {
    		return this.date;
    	}
     
     
    	public void setDate(java.util.Date date) {
    		this.date = date;
    	}
     
     
    	public String getCommentaire() {
    		return this.commentaire;
    	}
     
     
    	public void setCommentaire(String commentaire) {
    		this.commentaire = commentaire;
    	}
     
    	//@ManyToOne(optional=false)
    	public Document getDocument() {
    		return this.document;
    	}
     
     
    	public void setDocument(Document document) {
    		this.document = document;
    	}
     
    	//@OneToOne(mappedBy="userID")
    	public User getUser() {
    		return this.user;
    	}
     
     
    	public void setUser(User user) {
    		this.user = user;
    	}
     
    	@Id // tag définissant la clé primaire
    	@GeneratedValue(strategy=GenerationType.AUTO) // tag indiquant que la clé est auto générée
    	public Long getId() {
    		return this.id;
    	}
     
     
    	public void setId(Long id) {
    		this.id = id;
    	}
     
    }

    ensuite voici mon fichier persistence.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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0">
        <persistence-unit name="idocUnit">
        <jta-data-source>java:PostgresDS</jta-data-source>
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="connection.driver_class" value="org.postgresql.Driver" />
            <property name="transaction.factory_class" value="org.hibernate.transaction.JDBCTransactionFactory" />
            <property name="current_session_context_class" value="thread" />
        </properties>
        </persistenc
    et enfin lorsque j'exporte mon projet en jar sous jboss voici l'erreur qui s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    17:11:14,840 WARN [EJB3Configuration] Persistence provider caller does not implements the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null
     
    et l'autre erreur :
     
    org.hibernate.mapping : could not determine type for : java.util.Collection, for columns : [org.hibernate.mapping.Column(modification)]
    si quelqu'un peut m'aider, je suis preneur

    Merci

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Quelle version de JBoss ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour,
    Tout d'abord, je te conseille de mettre tes annotations sur les getters, plutôt que sur les attributs.

    ensuite, pour ce qui est des collection et JPA, je te conseille de procéder comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @entity
    public class Machin {
      //Tu instanties à la déclaration de l'attribut
      private Set<Truc> trucs = new HashSet<Truc>();
     
      @OneToMany(mappedBy="machin")
      public Set<Truc> getTrucs(){
        return trucs;
      }
    }
    Mais n'oublis pas de déclarer un chmp machin de type Machin dans la classe Truc et de l'annoter ave @ManyToOne.

    Malheureusement, ton code est trop long pour qu'on puisse localiser l'erreur (nous ne sommes pas des compilateurs ni débogueurs ), alors essaies au moins d'isoler la partie qui pose problème.

    Bonne chance.

  4. #4
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Bonjours à tous,

    merci de m'avoir déplacé mon post, en effet, je ne savais pas si je le mettais dans EJB ou JPA, donc là au moins il n'y a plus de problème.

    Je viens de lire vos réponses, je vais donc essayer de mettre en place les propositions faites.

    Pour ce qui est de la version de JBoss c'est la version 4.2.0

    Ah oui, une petite question, dans les différents tutoriaux, parfois les tags ils les mettent lors de la déclaration de la variables parfois vers les getters, pourriez vous me dire quelles différences il y a.

    Merci

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Normalement, il n'y a pas de différence... S'il devait y en avoir une, ce serait au niveau des programmes qui vont interpréter les annotations, et là, ce sont des boites noires...
    Personnellement j'utilise JBoss 4.2.2, je mets les annotations sur les getter et ça fonctionne parfaitement.

    Pour les relations OneToMany, le HashSet est construit par défaut comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Set<QuickSociete> quickSocietes = new HashSet<QuickSociete>(0);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    D'accord, donc je vais mettre les tags sur les getters.

    Par contre j'ai fait ce que m'as dit djo.mos, mais lorsque je déploie mon jar sur JBoss, il y a une erreu du style qu'il ne trouve pas une table : not found table User. Mais j'ai remarqué dans la console window lorsque mon jar se déploie il y a cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    09:43:25,726 WARN [SessionFactoryObjectFactory] InitialContext did not implements EventContext
    Du coup, pour rappel je dois créer 5 table dans une base de données mais seulement 3 sont créés alors est-ce que cette erreur peut empêcher la création des tables, en tout les cas j'imagine que c'est pas normal cette erreur

    Voici les 2 tables qui ne se créent pas
    Modification.java
    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
     
    @Entity
    public class Modification implements Serializable {
    	// les variables correspondent aux colonnes de la table Modification de la base de données
    	private java.util.Date date; // la date de modification
    	private String commentaire; // le commentaire pour expliqué ce qu'il a été fait comme modification
    	@ManyToOne
    	private Document document; // représente le document qui a été modifié
    	//private User user; // représente le user qui a fait cette modification
    	private static final long serialVersionUID = 258313988L;
    	private Long id; // identifiant obligatoire pour la table
     
    	// redéfinition de la méthode toString
     
    	public String toString() {
    		return "Modification" + " date=" + date + " commentaire=" + commentaire
    				+ " id=" + id;
    	}
     
    	// le constructeur vide
     
    	public Modification() {
    		super();
    	}
     
    	// les getters et les setters
     
    	public java.util.Date getDate() {
    		return this.date;
    	}
     
     
    	public void setDate(java.util.Date date) {
    		this.date = date;
    	}
     
     
    	public String getCommentaire() {
    		return this.commentaire;
    	}
     
     
    	public void setCommentaire(String commentaire) {
    		this.commentaire = commentaire;
    	}
     
    	//@ManyToOne(optional=false)
    	public Document getDocument() {
    		return this.document;
    	}
     
     
    	public void setDocument(Document document) {
    		this.document = document;
    	}
     
    	//@OneToOne(mappedBy="userID")
    	/*public User getUser() {
    		return this.user;
    	}
     
     
    	public void setUser(User user) {
    		this.user = user;
    	}
    */
    	@Id // tag définissant la clé primaire
    	@GeneratedValue(strategy=GenerationType.AUTO) // tag indiquant que la clé est auto générée
    	public Long getId() {
    		return this.id;
    	}
     
     
    	public void setId(Long id) {
    		this.id = id;
    	}
     
    }
    User.java

    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
     
    @Entity
    public class User implements java.io.Serializable {
    	// les variables correspondent aux colonnes de la table User de la base de données
    	private String nom; // représente le nom du user
    	private String Prenom; // représente le prenom du user
    	private String motDePasse; // représente le mot de passe du user
    	private String initiale; // représente les initiales du user
    	//private Modification dateModification; // représente la dernière modification que le user à fait
    	private static final long serialVersionUID = -334327501L;
    	private Long id; // identifiant obligatoire pour la table
     
     
    	// le constructeur vide
    	public User() {
    		super();
    	}
     
     
    	// redéfinition de la méthode toString
    	public String toString() {
    		return "User" + " nom=" + nom + " Prenom=" + Prenom + " motDePasse="
    				+ motDePasse + " initiale=" + initiale + " id=" + id;
    	}
     
    	// les getters et les setters
     
    	public String getNom() {
    		return this.nom;
    	}
     
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
     
    	public String getPrenom() {
    		return this.Prenom;
    	}
     
     
    	public void setPrenom(String Prenom) {
    		this.Prenom = Prenom;
    	}
     
     
    	public String getMotDePasse() {
    		return this.motDePasse;
    	}
     
     
    	public void setMotDePasse(String motDePasse) {
    		this.motDePasse = motDePasse;
    	}
     
     
    	public String getInitiale() {
    		return this.initiale;
    	}
     
     
    	public void setInitiale(String initiale) {
    		this.initiale = initiale;
    	}
     
    	//@OneToOne(mappedBy="modificationID")
    /*	public Modification getDateModification() {
    		return this.dateModification;
    	}
     
     
    	public void setDateModification(Modification dateModification) {
    		this.dateModification = dateModification;
    	}
    */
    	@Id // tag définissant la clé primaire
    	@GeneratedValue(strategy=GenerationType.AUTO) // tag indiquant que la clé est auto générée
    	public Long getId() {
    		return this.id;
    	}
     
     
    	public void setId(Long id) {
    		this.id = id;
    	}
    }
    J'ai fais la correction que djo.mos m'avais dit de faire,c'est à dire j'ai un set<Modification> modification dans la classe Document, du coup je l'ai annoté comme ceci @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "document") et dans ma classe Modification, j'ai une variable Document document que j'ai annoté par @ManyToOne

    et dans ma console windoiw, j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    09:43:26,148 ERROR [ShemaUpdate] Unsuccessful : alter table Modification add constraint FKE0FD25BC42C588C7 foreign key <document> references Document
    09:43:26,148 ERROR [SchemaUpdate] ERROR: foreign key constraint "fke0fd25bc42588c7" cannot be implemented
    key columns "document" and "id" are of icompatible types : bytea and bigint

  7. #7
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour,
    pourquoi est ce ceci: "//@ManyToOne(optional=false)" est commenté ? Faudrait le décommenter ...

  8. #8
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Bonjour,

    oui en fait j'avance petit à petit, je voulais faire tout d'un coup, c'est à dire mettre toutes les relations entre les tables mais avec les erreurs qu'il y avait j'ai préféré faire les relations une par une c'est pour cela que certaines lignes sont commentés.

    Pour l'instant, grace à tes conseils je suis arrivé à faire une relation @OneToMany et une relation @ManyToMany, je continue et je vais essayer de faire une relation @OneToOne, mais tous les exemples que je vois, il y a des @JoinColumn et je ne sais pas à quoi ça sert, donc je continue à chercher

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu utilises le mapping initial de Document ?
    Tu as un problème au niveau de la définition de la clé, tu utilises @Column au lieu de @Id

    Peux-tu montrer le mapping complet ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Merci pour votre aide, c'est bon finalement je nai pas eu besoin de faire des relations @OneToOne, par conséquent les relations @ManyToMany et @ManyToOne et @OneToMany fonctionne.

    Je vais expliquer comment ça fonctionne (enfin j'espère que je vais être clair)

    Prenez un exemple, un document peut avoir des modifications, des tags, un type et les modifications sont faites par un utilisateur, on a donc besoin de 5 tables document, modification tags, typedocument et utilisateur

    On dit qu'un document peut avoir subi plusieurs modifications donc la relation qu'il y a entre un document et modification et de 1,n du coup on parle de relation @OneToMany

    Du coup dans la classe document.java :

    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
    @Entity
    public class Document implements Serializable{
    	...
    	@Column(name = "modification", nullable = false)
    	private java.util.Set<Modification> Modification; // la date de dernière modification
    
    
    	
    	// le constructeur qui est vide
    	
    	public Document() {
    		super();
    	}
    
    	
    	// redéfinition de la méthode ToString
    	
    	public String toString() {
    		return "Document" + " nom=" + nom + " date_creation=" + date_creation
    				+ " emplacement=" + emplacement + " id=" + id;
    	}
    
    	
    	// les getters et setters
    	
               ....
    	
    	@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "document")
    	public Collection<Modification> getModification() {
    		if (Modification == null) {
    			Modification = new java.util.HashSet<Modification>();
    		}
    		return Modification;
    	}
    
    	
    	public void setModification(java.util.Set<Modification> Modification) {
    		this.Modification = Modification;
    	}
    
    	
    	public void addModification(Modification Modification) {
    		getModification().add(Modification);
    	}
    
    	
    	public void removeModification(Modification Modification) {
    		getModification().remove(Modification);
    	}
    
    ...
    }
    On ajoute le tag @OneToMany vers le getter de la liste des modifications, dans ce tag l'attribut mappedBy permet de savoir ce qu'il faut récupérer dans la classe modification, dans notre cas il faudra ajouter le tag @OneToMany dans la classe modification vers le getter de document

    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
    @Entity
    public class Modification implements Serializable {
    	...
    	@Column(name = "documentID", nullable = false)
    	private Document document; // représente le document qui a été modifié
    	
    	
    	// redéfinition de la méthode toString
    	
    	public String toString() {
    		return "Modification" + " date=" + date + " commentaire=" + commentaire
    				+ " id=" + id;
    	}
    
    	// le constructeur vide
    	
    	public Modification() {
    		super();
    	}
    
    	// les getters et les setters
    	
            ...
    	
    	@ManyToOne
    	@JoinColumn(name = "documentID")
    	public Document getDocument() {
    		return this.document;
    	}
    
    	
    	public void setDocument(Document document) {
    		this.document = document;
    	}
    Ensuite pour une relation @ManyToMany, prenons toujours le même exemple un document peut avoir plusieurs tags et un tags peut référencer plusieurs document par conséquent,
    voici la code de la classe document.java

    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
    @Entity
    public class Document implements Serializable{
    	
            ....
    	
    	@Column(name = "tag", nullable = false)
    	private java.util.Set<Tag> tag; // la liste des tags représentant ce document
    	
    
    	
    	// le constructeur qui est vide
    	
    	public Document() {
    		super();
    	}
    
    	
    	// redéfinition de la méthode ToString
    	
    	public String toString() {
    		return "Document" + " nom=" + nom + " date_creation=" + date_creation
    				+ " emplacement=" + emplacement + " id=" + id;
    	}
    
    	
    	// les getters et setters
    	
    	...
    
              @ManyToMany(cascade=CascadeType.ALL, mappedBy="document", targetEntity=Tag.class)
    	public java.util.Set<Tag> getTag() {
    		if (tag == null) {
    			tag = new java.util.HashSet<Tag>();
    		}
    		return tag;
    
    	}
    
    	
    	public void setTag(java.util.Set<Tag> tag) {
    		this.tag = tag;
    	}
    
    	
    	public void addTag(Tag tag) {
    		getTag().add(tag);
    	}
    
    	
    	public void removeTag(Tag tag) {
    		getTag().remove(tag);
    	}
    et voici la classe tag.java :

    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
    @Entity
    public class Tag implements Serializable {
    	
            ...
    
    	@Column(name = "document", nullable = false)
    	private java.util.Set<Document> document; // un tag peut être associé à plusieurs documents
    	
    	@Column(name = "id", nullable = false)
    	private Long id; // identifiant obligatoire pour la table
    
    	// le constructeur vide
    	
    	public Tag() {
    		super();
    	}
    
    	// redéfinition de la méthode toString
    	
    	public String toString() {
    		return "Tag" + " nom=" + nom + " commentaire=" + commentaire + " id="
    				+ id;
    	}
    
    	// les getters et les setters
    	
    	...
    
    	@ManyToMany
    	public java.util.Set<Document> getDocument() {
    		if (document == null) {
    			document = new java.util.HashSet<Document>();
    		}
    		return document;
    	}
    
    	
    	public void setDocument(java.util.Set<Document> document) {
    		this.document = document;
    	}
    
    	
    	public void addDocument(Document document) {
    		getDocument().add(document);
    	}
    
    	
    	public void removeDocument(Document document) {
    		getDocument().remove(document);
    	}
    J'espère que cela pourra vous éclaircir les idées, surtout pour savoir où et comment placer les tags, en tout les cas encore merci à djo.mos et à OButterlin qui m'ont permis de mieux comprendre

  11. #11
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Oui merci OButterlin, en effet, lorsque j'ai copié mon code sur le forum j'avais vu cette erreur et je l'ai corrigé de mon côté mais pas sur le forum

    Et bien maintenant que j'ai réussi à créer toutes mes tables, je vais essayer de les remplir, là aussi je pense que ça va être une autre histoire

    Merci,
    Bonne journée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2012, 13h00
  2. EJB entity bean et LazyInitializationException
    Par bard123 dans le forum JPA
    Réponses: 27
    Dernier message: 13/03/2008, 17h14
  3. EJB Entity Bean et problème de mapping
    Par bard123 dans le forum JPA
    Réponses: 13
    Dernier message: 07/03/2008, 08h54
  4. [Jonas] Impossible de déployer une Entity Bean CMP2
    Par blockparty dans le forum JOnAS
    Réponses: 2
    Dernier message: 01/12/2005, 15h45
  5. [ Entity bean ] CMP
    Par hocinema dans le forum Websphere
    Réponses: 5
    Dernier message: 03/10/2003, 11h33

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