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

Java EE Discussion :

Insertion en cascade


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut Insertion en cascade
    Bonjour,

    J'ai une question car je bloque sur un problème que je n'arrives pas à résoudre.

    Admettons une entité MAISON qui à une Collection d'entités PIECE mappées bidirectionnellement. L'entité PIECE à une Collection de MEUBLEs mappées bidirectionnellement.

    Depuis l'application WEB

    Pour permettre à l'internaute de créer sa maison, il peut créer une MAISON en session et y ajouter des PIECEs. Il peut ensuite ajouter des MEUBLEs à ses pièces. Une fois qu'il désire enregistrer sa MAISON, je fais un persist de la MAISON mais cela échoue à chaque fois.

    Une constatation aussi : Si je fais un persist de la MAISON et qu'elle n'a aucune PIECE dans sa Collection, l'insertion réussi parfaitement.

    Directement dans le session bean

    Si je créé une MAISON dans une méthode quelconque du session bean avec des PIECEs et que je fais un persist, cela fonctionne parfaitement.


    Merci si vous pouvez m'aider.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    J'ai trouvé plusieurs infos sur des forums américains notamment :

    • Ajouter les librairies TopLink à l'application cliente
    • Utiliser des types EAGER et non LAZY pour les insertions


    J'ai beau avoir effectué ces tâches, impossible d'effectuer une insertion d'une entité depuis ma Servlet. par contre, depuis le session bean ca fonctionne toujours correctement.

  3. #3
    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
    Peux-tu montrer les Entity beans concernés ?

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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut Entités
    Voici mes entités :

    ELCourse
    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
     
    @Entity
    @Table(name="Courses")
    @NamedQueries({
        @NamedQuery(
            name="findAllCourse",
            query="SELECT course FROM ELCourse AS course"),
        @NamedQuery(
            name="findCourseByName",
            query="SELECT course FROM ELCourse AS course WHERE course.name=:name"),
        @NamedQuery(
            name="findCourseById",
            query="SELECT course FROM ELCourse AS course WHERE course.id=:courseId")}      
        ) 
    public class ELCourse implements Serializable {
        private static final long serialVersionUID = 1L;
        private Long id;
        private String name;
        private String description;
        private Collection<ELModule> modules = new ArrayList<ELModule>();
        private Date insert_on;  
        private int duration;
        private int lang=0;
        private boolean deleted = false;
     
        @PrePersist
        void prePersist()
        {
            System.out.println("Pre Persist called on ELCourse !");  
        }
     
        public void setId(Long id) {
            this.id = id;
        }
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Long getId() {
            return id;
        }
     
        public ELCourse() {
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public Date getInsert_on() {
            return insert_on;
        }
     
        public void setInsert_on(Date insert_on) {
            this.insert_on = insert_on;
        }
     
        @OneToMany(cascade ={CascadeType.ALL},fetch=FetchType.EAGER)
        public Collection<ELModule> getModules() {
            return modules;
        }
     
        public void setModules(Collection<ELModule> modules) {
            this.modules = modules;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public boolean isDeleted() {
            return deleted;
        }
     
        public void setDeleted(boolean deleted) {
            this.deleted = deleted;
        }
     
        public int getDuration() {
            return duration;
        }
     
        public void setDuration(int duration) {
            this.duration = duration;
        }
     
        public int getLang() {
            return lang;
        }
     
        public void setLang(int lang) {
            this.lang = lang;
        }
     
        @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 ELCourse)) {
                return false;
            }
            ELCourse other = (ELCourse) 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 "fr.iosisgroup.elearning.dd.bo.ELCourse[id=" + id + "]";
        }
     
    }
    ELModule
    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
     
    @Entity
    @Table(name="Modules")
    public class ELModule implements Serializable, Comparable<ELModule> {
        private static final long serialVersionUID = 1L;
        private Long id;
        private String name;
        private int moduleNumber;
        private String description;
        private Collection<ELStep> steps = new ArrayList<ELStep>();
        private int duration;    
     
        @PrePersist
        void prePersist()
        {
            System.out.println("Pre Persist called on ELModule !");  
        }    
     
     
        public void setId(Long id) {
            this.id = id;
        }
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Long getId() {
            return id;
        }
     
        public ELModule() {
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public int getDuration() {
            return duration;
        }
     
        public void setDuration(int duration) {
            this.duration = duration;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        @OneToMany(cascade ={CascadeType.ALL},fetch=FetchType.EAGER)
        public Collection<ELStep> getSteps() {
            return steps;
        }
     
        public void setSteps(Collection<ELStep> steps) {
            this.steps = steps;
        }
     
        public int getModuleNumber() {
            return moduleNumber;
        }
     
        public void setModuleNumber(int moduleNumber) {
            this.moduleNumber = moduleNumber;
        }
     
        @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 ELModule)) {
                return false;
            }
            ELModule other = (ELModule) 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 "fr.iosisgroup.elearning.dd.bo.ELModule[id=" + id + "]";
        }
     
        public int compareTo(ELModule o) {
            if(this.getModuleNumber()<o.getModuleNumber())
                return -1;
            if(this.getModuleNumber()>o.getModuleNumber())
                return 1;
            return 0;
        }
    }
    ELStep
    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
     
    @Entity
    @Table(name="Steps")
    @NamedQueries({
        @NamedQuery(
            name="findStepById",
            query="SELECT step FROM ELStep AS step WHERE step.id=:stepId"),   
        @NamedQuery(
            name="findAllSteps",
            query="SELECT steps FROM ELStep AS steps")}      
        ) 
    public class ELStep implements Serializable, Comparable<ELStep>{
        private static final long serialVersionUID = 1L;
        private Long id;
        private String name;
        private String URIContent;
        private int stepPosition;
        private int duration;
        private String description;
     
        @PrePersist
        void prePersit()
        {
            System.out.println("Pre Persist called on ELStep !");  
        }    
     
        public ELStep() {
        }
     
        public String getURIContent() {
            return URIContent;
        }
     
        public void setURIContent(String URIContent) {
            this.URIContent = URIContent;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }    
     
        public void setId(Long id) {
            this.id = id;
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public int getDuration() {
            return duration;
        }
     
        public void setDuration(int duration) {
            this.duration = duration;
        } 
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Long getId() {
            return id;
        }
     
        public int getStepPosition() {
            return stepPosition;
        }
     
        public void setStepPosition(int stepPosition) {
            this.stepPosition = stepPosition;
        }
     
     
        @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 ELStep)) {
                return false;
            }
            ELStep other = (ELStep) 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 "fr.iosisgroup.elearning.dd.bo.Step[id=" + id + "]";
        }
     
        public int compareTo(ELStep o) {
            if(this.getStepPosition()<o.getStepPosition())
                return -1;
            if(this.getStepPosition()>o.getStepPosition())
                return 1;
            return 0;
        }
    }
    Je ferai aussi remarquer que la récupération des entités fonctionne très bien depuis l'application web. Uniquement le persist et le merge pose problème lorsque appelé depuis l'application web.

    Les entités anciennement appelées MAISON PIECE et MEUBLE sont nouvellement renommées ELCourse ELModule ELStep.

    Merci de votre aide.

  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
    Billets dans le blog
    1
    Par défaut
    Comment as-tu configuré le persistence.xml ?

    En général, on laisse le conteneur EJB s'occuper de la persistence via JTA.
    De ce fait, on ne peut pas directement persister de la couche web, à moins de demander un EntityManager par la couche application (mais là, on n'est plus JTA) via une Factory.

    Bref, ce n'est pas forcément surprenant que la couche web ne persiste pas mais j'attends de connaître le paramétrage...

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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Par défaut
    Ouais,

    Mais la couche web persiste très bien, tant qu'il n'y a pas de cascade a faire... L'insertion d'utilisateur se fait très bien par exemple.

    Persistance.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" 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">
      <persistence-unit name="IOSIS_EAR_v3_PU" transaction-type="JTA">
        <provider>oracle.toplink.essentials.PersistenceProvider</provider>
        <jta-data-source>elearningDD_ejb_DS</jta-data-source>
        <properties>
          <property name="toplink.ddl-generation" value="create-tables"/>
        </properties>
      </persistence-unit>
    </persistence>

Discussions similaires

  1. Insertion cascade avec JPA ne marche pas
    Par marwen109 dans le forum JPA
    Réponses: 1
    Dernier message: 25/03/2012, 21h57
  2. Insertion en cascade
    Par Madfrix dans le forum JPA
    Réponses: 5
    Dernier message: 25/03/2012, 00h28
  3. [SQL2K] Insert en cascade, trigger
    Par Faboul dans le forum Développement
    Réponses: 6
    Dernier message: 08/08/2007, 10h48
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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