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 :

j'arrive pas à faire un set sur ma relation ManyToOne


Sujet :

JPA Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut j'arrive pas à faire un set sur ma relation ManyToOne
    Bonjour,

    Afin d'aller au plus simple je vais prendre 2 objets de test : un object Library et un objet Book...

    Dans la classe Library la relation est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @OneToMany(mappedBy = "library", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Book> books;
    Dans ma classe Book la relation est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "library_fk", nullable = false)
    private Library library;
    Dans mon stateless session bean je veux affecter une liste de livres, que j'ai récupèré d'une autre base de données (autre entityManager), à ma Library :
    1) J'exécute la requête et obtiens ma liste de livres,
    2) Puis je veux renseigner la relation ManyToOne de chaque objet Book i.e., book.setLibrary(library) avant de persister tout l'objet Library...

    Mais là exception!! voici la stacktrace :

    Caused by: java.lang.NoSuchMethodError: fr.test.entity.Book._toplink_setlibrary(Lfr/test/entity/LibraryV
    at fr.test.entity.Book.setLibrary(Unknown Source)
    ...
    Je ne cromprends pas ? Avez vous une idée du pb ?

    Voici mon environnement :
    - jdk1.6.0_04
    - Sun Java System Application Server 9.1_01 (build b09d-fcs)
    - Toplink

    Merci ++

    Greg

  2. #2
    Membre actif
    Avatar de David Gimelle
    Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Points : 221
    Points
    221
    Par défaut
    Est-ce que tu peux nous montrer le code complet de tes 2 entity et aussi la partie tu appel la methode setLibrary ?

    David Gimelle
    Developpeur J2EE
    http://getj2ee.over-blog.com
    David Gimelle
    Développeur J2EE - Scrum Master
    Organisateur de http://www.soft-shake.ch/
    Blog: http://getj2ee.over-blog.com

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Il faut donc oublier mes objets de test Library et Book
    Les vrais objets s'appellent : Traitement et presta (un traitement à plusieurs prestas...)

    1) l'entity Traitement (feu Library )
    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
    public class Traitement implements Serializable {
    
        // ======================================
        // = Attributs =
        // ======================================
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @Column(nullable = false)
        private Integer moisSur11;
        @Column(nullable = false, length = 4)
        private Integer annee;
        @OneToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "etab_fk", nullable = false)
        private Etab etab;
        @Temporal(TemporalType.TIMESTAMP)
        private Date dateDebut;
        @Temporal(TemporalType.TIMESTAMP)
        private Date dateFin;
        @Temporal(TemporalType.DATE)
        private Date dateVersion;
        private Integer montantMO;
        private Integer montantDMI;
        @OneToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "userTraitement_fk", nullable = true)
        private User userTraitement;
        @OneToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "userRespVersion_fk", nullable = true)
        private UserRespT2A userRespVersion;
        @OneToMany(mappedBy = "traitement", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        private List<RUM> rums ;
        @OneToMany(mappedBy = "traitement", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        private List<Presta> prestas;
    2) l'entity Presta (feu Book )
    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
    public abstract class Presta implements Serializable {
    
        // ======================================
        // = Attributs =
        // ======================================
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @Column(length = 20)
        private String numSej;
        @Column(length = 6)
        private String codePhco;
        // La quantité avec le coeff T2A déjà appliqué
        private Float quantite;
        // Le montant avec le coeff T2A déjà appliqué
        private Float montant;
        @Temporal(TemporalType.DATE)
        private Date datePresta;
        // Le code correspondant de la presta dans le référentiel T2A
        @Column(length = 15)
        private String code;
        private boolean validiteT2A;
        private Rejet rejet;
        @Transient
        private Type type;
        private String numRUM;
        // Fetch mode positionné en LAZY afin d'utiliser de préférence
        // l'attribut numRum
        @OneToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "rum_fk", nullable = true)
        private RUM rum;
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "traitement_fk", nullable = false)
        private Traitement traitement;
    3) mon session bean
    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
    List<Presta> prestas = new ArrayList<Presta>();
            Query query;
            String codeEtab;
            Date dateConsoDebut;
            Date dateConsoFin;
            List<MO> mos;
            List<DMI> dmis;
    
            // Récupération des paramètres pour la requête
            logger.fine("Récupération des paramètres pour la requête");
            codeEtab = traitement.getEtab().getCode();
            dateConsoDebut = this.findDateEntreeRUMLaPlusAncienne(traitement);
            dateConsoFin = traitement.getDernierJourDeLaPeriode();
    
            // Récupération des MO
            logger.fine("Récupération des MO");
            query = em_modmi
                    .createQuery("SELECT NEW fr.aphm.pmsi.amdr.entity.MO(mops.codePhco, "
                            + " mops.ucd, mops.dossier, mops.quantiteT2A, "
                            + " mops.dateConso, mops.montant) "
                            + " FROM MOProduitSejour mops "
                            + " WHERE mops.origineIdent2 = :paramOrigineIdent2 "
                            + " AND mops.validiteT2A = :paramValiditeT2A "
                            + " AND mops.groupePresc <= :paramGroupePrescMax "
                            + " AND mops.dateConso BETWEEN :paramDateConsoDebut AND :paramDateConsoFin ");
    
            query.setParameter("paramOrigineIdent2", codeEtab);
            query.setParameter("paramValiditeT2A", 1); // valide
            query.setParameter("paramGroupePrescMax", GROUPE_PRESC_MAX);
            query.setParameter("paramDateConsoDebut", dateConsoDebut);
            query.setParameter("paramDateConsoFin", dateConsoFin);
    
            mos = query.getResultList();
            logger.fine("Total MO = " + mos.size());
            prestas.addAll(mos);
    
            // Récupération des DMI
            logger.fine("Récupération des DMI");
            query = em_modmi
                    .createQuery("SELECT NEW fr.aphm.pmsi.amdr.entity.DMI(dmips.codePhco, "
                            + " dmips.lpp, dmips.dossier, dmips.quantiteT2A, "
                            + " dmips.datePose, dmips.montant) "
                            + " FROM DMIProduitSejour dmips "
                            + " WHERE dmips.origineIdent2 = :paramOrigineIdent2 "
                            + " AND dmips.validiteT2A = :paramValiditeT2A "
                            + " AND dmips.datePose BETWEEN :paramDateConsoDebut AND :paramDateConsoFin ");
    
            query.setParameter("paramOrigineIdent2", codeEtab);
            query.setParameter("paramValiditeT2A", 1); // valide
            query.setParameter("paramDateConsoDebut", dateConsoDebut);
            query.setParameter("paramDateConsoFin", dateConsoFin);
    
            dmis = query.getResultList();
            logger.fine("Total DMI = " + dmis.size());
            prestas.addAll(dmis);
    
            traitement.setPrestas(prestas);
    
            Iterator<Presta> itPresta = traitement.getPrestas().iterator();
            while (itPresta.hasNext()) {
                Presta presta = itPresta.next();
                presta.setTraitement(traitement);  // ça bugue ici !! :aie:                              
            }    
    
            // On sauvegarde les prestas
            em.merge(traitement);

    MERCI POUR TON AIDE,

    Greg

  4. #4
    Membre actif
    Avatar de David Gimelle
    Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Points : 221
    Points
    221
    Par défaut
    Citation Envoyé par gdouzon Voir le message
    Iterator<Presta> itPresta = traitement.getPrestas().iterator();
    while (itPresta.hasNext()) {
    Presta presta = itPresta.next();
    presta.setTraitement(traitement); // ça bugue ici !!
    }

    // On sauvegarde les prestas
    em.merge(traitement);
    Je me demande si tu n aurais pas un element vide dans ta liste. Pour voir ca le plus simple est de mettre un
    System.out.println("traitement:"+traitement);
    juste apres
    Presta presta = itPresta.next();
    David Gimelle
    Développeur J2EE - Scrum Master
    Organisateur de http://www.soft-shake.ch/
    Blog: http://getj2ee.over-blog.com

Discussions similaires

  1. Je n'arrive pas à faire du SCROLL sur ma page
    Par jerem_orga dans le forum Android
    Réponses: 2
    Dernier message: 26/12/2011, 10h39
  2. [AC-2007] Je n'arrive pas à faire des modif sur mon formulaire
    Par solaar dans le forum IHM
    Réponses: 6
    Dernier message: 18/07/2011, 21h14
  3. Je n'arrive pas à faire marcher le wifi sur CentOS 5
    Par totoAussi dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 16/03/2011, 10h16
  4. Très débutant : je n'arrive pas à faire fonctionner le JDK
    Par miltonis dans le forum Général Java
    Réponses: 20
    Dernier message: 19/10/2005, 21h20
  5. [RegEx] je n'arrive pas à faire deux regex(s?)
    Par sloshy dans le forum Langage
    Réponses: 5
    Dernier message: 17/10/2005, 16h21

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