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 :

JPA OneTOMany Deux EJB jar


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut JPA OneTOMany Deux EJB jar
    BOnjour,

    Je m'étais trompé de groupe, c'est un doublon, je m'excuse d'avance

    Je suis en train de développer une appli avec JPA toplink.
    j'ai deux ejb jar auth.jat et book.jar, je dois dans une classe
    deuxième aller chercher la clef étrangère d'une classe de auth.jar

    mais j'ai des tas erreurs au déploiement.

    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
     
    auh.jar
    @Entity
    classe A
       @Id
       private Long id;
     
    ....
     
    book.jar
    @Entity
    class book
        @Id
        private Long id;
     
    ...
        @ManyToOne(cascade=CascadeType.ALL)
        @JoinColumn(name="A_ID")
        private A a;
     
        .... 
        public Collection<A> geta(){
    ..
    Elles sont dans deux jar différents mais dans le même EAR
    apparemment impossible, d'ailleurs dans netbeans, j'ai du faire les import
    à la mano imposssible de faire des imports auto. Mais je n'ai pas d'erreur.

    Est -ce possible ??
    olivier

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    où se trouve ton erreur ?
    peux tu donner la printStackTrace ?

    dans ton code au niveau de l'Entity book, tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @JoinColumn(name="A_ID")
    mais dans ta classe A l'identifiant est id.

    corrigez moi si je me trompe mais si tu n'annotes pas tes champs avec @Column() , le nom du champs en base de données sera le nom de ta variable.

    si tu fais comme suit ça change quelque chose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @Entity
    class book
     
    	@Id
            @Column(name = "A_ID", nullable = false)
    	private Long id;
    ...

    Edit:

    pour avoir différents jar dans un ear (j'ai eu le même soucis) tu dois rédiger un ejb-jar.xml et le mettre dans le META-INF de ton jar

    j'ai pas eu d'infos lorsque j'ai rencontré ce soucis alors je te garanti pas que cela soit la bonne solution.

  3. #3
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut suite et explications
    Bonjour

    auth.jar


    classe discipline

    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
     
    @Entity
    @Table(name = "GEODE_DISCIPLINE")
    @NamedQueries({@NamedQuery(name = "GeodeDiscipline.findById", query = "SELECT g FROM GeodeDiscipline g WHERE g.id = :id"), @NamedQuery(name = "GeodeDiscipline.findByName", query = "SELECT g FROM GeodeDiscipline g WHERE g.name = :name"), @NamedQuery(name = "GeodeDiscipline.findByDescription", query = "SELECT g FROM GeodeDiscipline g WHERE g.description = :description"), @NamedQuery(name = "GeodeDiscipline.findByCreatedAt", query = "SELECT g FROM GeodeDiscipline g WHERE g.createdAt = :createdAt"), @NamedQuery(name = "GeodeDiscipline.findByUpdatedAt", query = "SELECT g FROM GeodeDiscipline g WHERE g.updatedAt = :updatedAt"), @NamedQuery(name = "GeodeDiscipline.findByClosingDate", query = "SELECT g FROM GeodeDiscipline g WHERE g.closingDate = :closingDate")})
    public class GeodeDiscipline implements Serializable {
        private static final long serialVersionUID = 123444956L;
     
        @Id
        @Column(name = "ID", nullable = false)
        private BigDecimal id;
        @Column(name = "NAME")
        private String name;
        @Column(name = "DESCRIPTION")
        private String description;
        @Column(name = "CREATED_AT")
        @Temporal(TemporalType.DATE)
        private Date createdAt;
        @Column(name = "UPDATED_AT")
        @Temporal(TemporalType.DATE)
        private Date updatedAt;
        @Column(name = "CLOSING_DATE")
        @Temporal(TemporalType.DATE)
        private Date closingDate;
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "discipline")
        private Collection<GeodeUser> geodeUserCollection;
     
        public GeodeDiscipline() {
        }
     
        public GeodeDiscipline(BigDecimal id) {
            this.id = id;
        }
     
        @Id
        public BigDecimal getId() {
            return id;
        }
     
        public void setId(BigDecimal id) {
            this.id = id;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public Date getCreatedAt() {
            return createdAt;
        }
     
        public void setCreatedAt(Date createdAt) {
            this.createdAt = createdAt;
        }
     
        public Date getUpdatedAt() {
            return updatedAt;
        }
     
        public void setUpdatedAt(Date updatedAt) {
            this.updatedAt = updatedAt;
        }
     
        public Date getClosingDate() {
            return closingDate;
        }
     
        public void setClosingDate(Date closingDate) {
            this.closingDate = closingDate;
        }
     
        public Collection<GeodeUser> getGeodeUserCollection() {
            return geodeUserCollection;
        }
     
        public void setGeodeUserCollection(Collection<GeodeUser> geodeUserCollection) {
            this.geodeUserCollection = geodeUserCollection;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (id != null ? id.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof GeodeDiscipline)) {
                return false;
            }
            GeodeDiscipline other = (GeodeDiscipline) object;
            if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "com.org.geode.entity.users.GeodeDiscipline[id=" + id + "]";
        }
    }
    book.jar

    classe exercice

    pour une discipline je peux avoir plusieurs exos ... 0..n
    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
     
    /**
     * @author bibi
     * @version 0.1
     */
    @Entity
    @Table(name="GEODE_EXERCICE")
    @SequenceGenerator(name="EXERCICESEQ",sequenceName="EXERCICE_SEQ",allocationSize=1)
    @NamedQueries({@NamedQuery(name=Exercices.QN.FIND_ALL,query="select e from Exercices e"),
        @NamedQuery(name=Exercices.QN.FIND_ONE,query="select e from Exercices e where e.id = :id"),
        @NamedQuery(name=Exercices.QN.FIND_ALLVALID,query="select e from Exercices e where e.state = :state")
    })
    public class Exercices implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy=GenerationType.SEQUENCE,generator = "EXERCICESEQ")
        private Long id;
     
        @ManyToOne(cascade=CascadeType.ALL)
        @JoinColumn(name="DISCIPLINE_ID")
        private GeodeDiscipline discipline;
     
        private String itemId;
        private String titre;
        private String exostate;
        @Temporal(javax.persistence.TemporalType.DATE)
        private Date create_at;
        @Temporal(javax.persistence.TemporalType.DATE)
        private Date updated_at;
     
        public Long getId() {
            return id;
        }
     
        public void setId(Long id) {
            this.id = id;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (id != null ? id.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Exercices)) {
                return false;
            }
            Exercices other = (Exercices) object;
            if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "book.geode.documents.Exercices[id=" + id + "]";
        }
     
        public String getItemId() {
            return itemId;
        }
     
        public void setItemId(String itemId) {
            this.itemId = itemId;
        }
     
        public String getTitre() {
            return titre;
        }
     
        public void setTitre(String titre) {
            this.titre = titre;
        }
     
        public Date getCreate_at() {
            return create_at;
        }
     
        public void setCreate_at(Date create_at) {
            this.create_at = create_at;
        }
     
        public Date getUpdated_at() {
            return updated_at;
        }
     
        public void setUpdated_at(Date updated_at) {
            this.updated_at = updated_at;
        }
     
     
     
        public String getState() {
            return exostate;
        }
     
        public void setState(String state) {
            this.exostate = state;
        }
     
        public GeodeDiscipline getDiscipline() {
            return discipline;
        }
     
        public void setDiscipline(GeodeDiscipline discipline) {
            this.discipline = discipline;
        }
     
        public static class QN {
            public static final String FIND_ALL = "findAllExercices";
            public static final String FIND_ONE ="FindOneExercice";
            public static final String FIND_ALLVALID = "FindAllExercicesValid";
         }
    }
    quand je deploie c'est la misère ...même dans les tests unitaires ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     failed.
    Internal Exception: Exception [TOPLINK-7250] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException
    Exception Description: [class book.geode.documents.Exercices] uses a non-entity [class com.org.geode.entity.users.GeodeDiscipline] as target entity in the relationship attribute [private com.org.geode.entity.users.GeodeDiscipline book.geode.documents.Exercices.discipline].
            at oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:143)
            at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:169)
            at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
            at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
            at book.geode.documents.CahierTest.setUp(CahierTest.java:40)
    il ne dois pas trouver la référence

    et je ne trouve pas de doc sur des déploiements d'entités su plusieurs jars.

    olivier

  4. #4
    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
    Billets dans le blog
    1
    Par défaut
    En pratique, on met les "Entity" dans un jar à part (entityEJB.jar pour l'exemple) et on référence le jar dans les différents 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
    15
    16
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
     
        <persistence-unit name="PU" transaction-type="JTA">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <jta-data-source>java:/SourceDS</jta-data-source>
     
            <jar-file>../entityEJB.jar</jar-file>
     
        </persistence-unit>
     
    </persistence>
    Et le tour est joué, tu peux les partager dans plusieurs projets

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

  5. #5
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut merci
    Bonjour,

    Donc je rassemble tous mes entités dans un seul jar ?

    En fait, je voulais faire un jar authentification réutilisable sans le poluer des objets métiers

    et faire un autre jar qui puisse utiliser déjà ces premières entités mais cela semble peu parfait ? avec JPA

    olivier

  6. #6
    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
    Billets dans le blog
    1
    Par défaut
    Tu n'es pas obligé de mettre tous tes Entity dans un jar, seulement les Entity "partagés"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/07/2012, 15h30
  2. Réponses: 4
    Dernier message: 24/07/2007, 11h06
  3. [EJB Session] JPA dans un EJB
    Par balmeyer dans le forum Java EE
    Réponses: 2
    Dernier message: 17/07/2007, 17h52
  4. Réponses: 2
    Dernier message: 16/03/2007, 18h34
  5. [ejb-jar] ClassNotFound....
    Par metalpetsFR dans le forum JOnAS
    Réponses: 5
    Dernier message: 03/02/2006, 08h06

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