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 - Impossible d'enregistrer en base (Java EE / Netbeans)


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 408
    Par défaut JPA - Impossible d'enregistrer en base (Java EE / Netbeans)
    Bonjour,

    Dans une application web, je souhaite enregistrer dans une base JDB un certain nombre d'enregistrements.
    Je n'arrive à insérer dans ma table !
    MERCI pour votre aide !

    J'ai l'erreur suivante qui porte sur l'id généré par une séquence (j'ai à peu prêt tout essayer mais rien ne marche !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Exception Description: Syntax error parsing [Insert p Into Parametre p (:utilisateur, :nom, :valeur1, :valeur2, :valeur3, :valeur4, :valeur5)]. 
    [0, 96] The query does not start with a valid identifier, has to be either SELECT, UPDATE or DELETE FROM.
    	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:155)
    	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:334)
    	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:278)
    	at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:163)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:142)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:116)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:102)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:86)
    	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1614)
    Voici mon code :

    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
     
    @Entity
    @Table(name = "Parametre")
    public class Parametre implements Serializable {
     
        @Id
        @GeneratedValue(strategy = GenerationType.TABLE, generator = "Parametre_Id_Table")
        @TableGenerator(name="Parametre_Id_Table", table="Parametre_Id_Table", allocationSize = 1, initialValue = 1)
        private int id;
     
        private String utilisateur;
     
        private String nom;
     
        private String valeur1;
     
        private String valeur2;
     
        private String valeur3;
     
        private String valeur4;
     
        private String valeur5;
     
        public Parametre() {
        }
     
        public Parametre(int i, String u, String n, String v1, String v2, String v3, String v4, String v5) {
     
            id = i;
            utilisateur = u;
            nom = n;
            valeur1 = v1;
            valeur2 = v2;
            valeur3 = v3;
            valeur4 = v4;
            valeur5 = v5;
     
        }
    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
     
    @Stateless
    public class ParametreFacade extends AbstractFacade<Parametre> {
     
        @PersistenceContext(unitName = "WebJODPU")
        private EntityManager em;
     
        @Override
        protected EntityManager getEntityManager() {
            return em;
        }
     
        public ParametreFacade() {
            super(Parametre.class);
        }
    ...
    ...
        public void creerParametre(Parametre parametre) {
     
            Query jQuery = em.createQuery("Insert p Into Parametre p (:utilisateur, :nom, :valeur1, :valeur2, :valeur3, :valeur4, :valeur5)");
     
            jQuery.setParameter("utilisateur", parametre.getUtilisateur());
            jQuery.setParameter("nom", parametre.getNom());
            jQuery.setParameter("valeur1", parametre.getValeur1());
            jQuery.setParameter("valeur2", parametre.getValeur2());
            jQuery.setParameter("valeur3", parametre.getValeur3());
            jQuery.setParameter("valeur4", parametre.getValeur4());
            jQuery.setParameter("valeur5", parametre.getValeur5());
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    ...
    Parametre parametre = new Parametre(0, "System", "TableauBordPanel" + j, "0", "0", "0", "false", "0");
     
    getParametreFacade().creerParametre(parametre);

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Query jQuery = em.createQuery("Insert p Into Parametre p (:utilisateur, :nom, :valeur1, :valeur2, :valeur3, :valeur4, :valeur5)");
    Exception Description: Syntax error parsing [Insert p Into Parametre p (:utilisateur, :nom, :valeur1, :valeur2, :valeur3, :valeur4, :valeur5)].
    [0, 96] The query does not start with a valid identifier, has to be either SELECT, UPDATE or DELETE FROM.
    C'est parce que tu ne peux pas faire un insert avec du JPQL.
    1- Soit tu utilises un native Query
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query jQuery = em.createNativeQuery("Insert Into Parametre(nomColonne1, nomColonne2...) values  (:utilisateur, :nom, :valeur1, :valeur2, :valeur3, :valeur4, :valeur5)");
    2- Ou tu utilises persist (à condition que tes mappings soient biens faits)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void creerParametre(Parametre parametre) {
            em.persist(parametre);
    }
    A+.

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 408
    Par défaut
    Bonjour et merci pour ta réponse.

    J'ai opté pour un persist et j'ai modifié ma séquence, mais ça ne marche toujours pas
    j'ai l'erreur suivante (à dire vrai je ne sais pas quoi de ma Pk Id) :

    Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: java.sql.SQLSyntaxErrorException: Tentative de modification de la colonne d'identité 'ID'.
    Error Code: 20000
    Call: INSERT INTO Parametre (ID, NOM, UTILISATEUR, VALEUR1, VALEUR2, VALEUR3, VALEUR4, VALEUR5) VALUES (?, ?, ?, ?, ?, ?, ?, ?)

    As-tu une idée ? MERCI

    voici mon code à présent :

    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
     
    @Entity
    @Table(name = "Parametre")
    public class Parametre implements Serializable {
     
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="PARAMETRE_SEQ")
        @SequenceGenerator(name = "PARAMETRE_SEQ", sequenceName = "PARAMETRE_SEQ", allocationSize = 1, initialValue = 1)
     
        private int id;
     
        private String utilisateur;
     
        private String nom;
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        public void creerParametre(Parametre parametre) {
     
            em.persist(parametre);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Parametre parametre = new Parametre(0, "System", "TableauBordPanel" + j, "0", "0", "0", "false", "0");
     
                        getParametreFacade().creerParametre(parametre);

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Retire l'initialisation de la valeur de id de ton constructeur.

    A+.

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 408
    Par défaut
    J'ai oté l'initialisation de ID mais dans ce cas j'ai l'erreur :

    Avertissement: DTX5014: Caught exception in beforeCompletion() callback:
    javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: java.sql.SQLSyntaxErrorException: Tentative de modification de la colonne d'identité 'ID'.
    Error Code: 20000
    Call: INSERT INTO Parametre (ID, NOM, UTILISATEUR, VALEUR1, VALEUR2, VALEUR3, VALEUR4, VALEUR5) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    bind => [8 parameters bound]
    Query: InsertObjectQuery(model.Parametre@32300e72)

    MERCI

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Dans ton premier code, tu utilisais GenerationType.TABLE, dans le second GenerationType.SEQUENCE. Comment est créé ta table?

    A+.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/03/2012, 11h24
  2. Aide EJB JPA Enregistrer en base de données
    Par Danicela dans le forum JPA
    Réponses: 6
    Dernier message: 01/01/2012, 12h34
  3. Réponses: 1
    Dernier message: 09/04/2009, 10h52
  4. [MySQL] impossible d'enregistrer dans la base
    Par car00x dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/02/2007, 13h25

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