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 :

Problème Persistance @ManyToMany


Sujet :

JPA Java

  1. #1
    Membre du Club

    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 48
    Points
    48
    Par défaut Problème Persistance @ManyToMany
    Bonjour,

    Etant débutant en JPA je me forme au travers du livre d'Antonio goncalves JavaEE 6 Glassfish.

    J'ai donc effectué un tuto ou deux tables "Cd" et "Artist" sont en relation via une relation @ManyToMany.

    J'ai donc préalablement crée mes trois tables en sql à savoir
    CD
    ARTIST
    JND_ART_CD (table de jointure)

    J'ai définit mes deux entités à savoir: Artist et Cd et mon fichier Main ArtistCd

    Voici l'erreur que j'ai lorsque je souhaite "runé" le programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mynewdatabase.sequence' doesn't exist
    Error Code: 1146
    Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
    Exception in thread "main" Local Exception Stack: 
    	bind => [2 parameters bound]
    Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
    Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mynewdatabase.sequence' doesn't exist
    Error Code: 1146
    Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
    Je pense donc que le problème viens de mon fichier xml de persistance mais malgré de nombreuses recherches et de nombreuses recherches sur le net je bloque, voici le fichier 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.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_2_0.xsd">
      <persistence-unit name="ArtistCdPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>Fiche.Artist</class>
        <class>Fiche.Cd</class>
        <properties>
          <property name="javax.persistence.jdbc.user" value="root"/>
          <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/MyNewDatabase"/>
          <property name="javax.persistence.jdbc.password" value="******"/>
          <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        </properties>
      </persistence-unit>
    </persistence>
    Voici le code du Main:

    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
     
    package artistcd;
     
    import Fiche.Artist;
    import Fiche.Cd;
    import java.util.List;
    import javax.persistence.Query;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityTransaction;
    import javax.persistence.Persistence;
     
        public static void main(String[] args) {
     
     
        Artist fiche = new Artist();  
        fiche.setLastName("Franck");
        fiche.setFirstName("Moulino");
     
     
        Cd fiche2 = new Cd();
        fiche2.setTitle("Goulou a caracasse");
        fiche2.setPrice(12.8);
        fiche2.setDescription("rock");
     
     
     
        EntityManagerFactory emf  =  Persistence.createEntityManagerFactory("ArtistCdPU");
        EntityManager em = emf.createEntityManager();    
        EntityTransaction tx= em.getTransaction();
     
        Query query = em.createNamedQuery("recherchefranck");
        List <Artist> ListFranck = query.getResultList();
     
        if(ListFranck.isEmpty()){
          tx.begin();
          em.persist(fiche);
          em.persist(fiche2);
          tx.commit();
        }
     
            else{
            System.out.println("La fiche existe dejà");
            }   
        query = em.createNamedQuery("cdartist"); 
        List <Cd> ListCd = query.getResultList();
     
        fiche.setAppearsoncds(ListCd);
     
            for(Cd a: ListCd){
                System.out.println("Les disques rock sont: "+a.getTitle());
                }
     
         em.close();
         emf.close();   
            }
        }
    De l'entité Artist:
    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
    package Fiche;
     
    import java.io.Serializable;
    import java.util.List;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQuery;
     
     
    @Entity
    @NamedQuery(name="recherchefranck",query="SELECT a FROM Artist a WHERE a.lastname='Franck'")
    public class Artist implements Serializable {
     
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long artist_id;
        private String lastname;
        private String firstname;
    //Mise en relation de la Table Artist avec la table Jnd_art_cd
        @ManyToMany
        @JoinTable(name = "jnd_art_cd",
        joinColumns =
        @JoinColumn(name = "artist_fk"),
        inverseJoinColumns =
        @JoinColumn(name = "cd_fk"))
        private List <Cd> appearsoncds;
     
        //Constructeurs   
        public Artist() {
        }
     
        public Artist(Long artist_id, String lastname, String firstname) {
            this.artist_id = artist_id;
            this.lastname = lastname;
            this.firstname = firstname;
        }
     
        // GETTERS AND SETTERS
        public Long getArtist_Id() {
            return artist_id;
        }
     
        public void setArtist_Id(Long id) {
            this.artist_id = artist_id;
        }
     
        public String getFirstName() {
            return firstname;
        }
     
        public void setFirstName(String firstname) {
            this.firstname = firstname;
        }
     
        public String getLastName() {
            return lastname;
        }
     
        public void setLastName(String lastname) {
            this.lastname = lastname;
        }
     
        public void setAppearsoncds(List<Cd> appearsoncds) {
            this.appearsoncds = appearsoncds;
        }
     
     
    }
    Et de l'entité Cd:
    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
    package Fiche;
     
    import java.io.Serializable;
    import java.util.List;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQuery;
     
    @Entity
    @NamedQuery(name="cdartist",query ="SELECT c FROM Cd c WHERE c.description='rock'")
    public class Cd implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long cd_id;
        private String title;
        private Double price;
        private String description;
        //Je map la relation entre les tables
        @ManyToMany (mappedBy="appearsoncds")
        private List<Artist>createdByArtists;
     
        public Cd(){
     
        }
     
        public Cd(String title, Double price, String description) {
            this.title = title;
            this.price = price;
            this.description = description;
        }
     
     
     
        //GETTERS AND SETTERS
        public Long getCd_Id() {
            return cd_id;
        }
     
        public void setCd_Id(Long cd_id) {
            this.cd_id = cd_id;
        }
     
        public String getDescription() {
            return description;
        }
     
        public void setDescription(String description) {
            this.description = description;
        }
     
        public Double getPrice() {
            return price;
        }
     
        public void setPrice(Double price) {
            this.price = price;
        }
     
        public String getTitle() {
            return title;
        }
     
        public void setTitle(String title) {
            this.title = title;
        }
     
     
    }
    Avez vous une idée d'ou cette erreur peux provenir? Et comment y remédier?
    Merci par avance.

  2. #2
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Au vu de l'erreur, je te dirai de regarder au niveau de la configuration du dialect utilisé. (Pour Hibernate par exemple c'est la propriété hibernate.dialect à configurer dans le persistence.xml)

    L'erreur ne me semble pas venir de ton code réellement, mais d'une requete générée par ton ORM qui n'est pas supporté par Mysql.
    N'oubliez pas le quand vous avez votre solution.

  3. #3
    Membre du Club

    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 48
    Points
    48
    Par défaut
    En faite le problème semble être venu de la génération de l'ID de ma table Artist.

    Il aurait fallu ajouter @GeneratedValue(strategy = GenerationType.IDENTITY)

    Je ne saurais l'expliquer mais le problème a été réglé.

    Merci de ton aide dans tous les cas !

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

Discussions similaires

  1. Problème: persistence.xml skipped
    Par Pschittt dans le forum JPA
    Réponses: 6
    Dernier message: 27/08/2010, 15h22
  2. Réponses: 2
    Dernier message: 11/07/2008, 14h44
  3. Réponses: 1
    Dernier message: 23/01/2008, 10h12
  4. Réponses: 1
    Dernier message: 02/01/2008, 13h28
  5. LDAP : Problème persistant de connexion à un serveur LDAP!!!
    Par onouiri dans le forum Développement
    Réponses: 11
    Dernier message: 15/11/2005, 19h05

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