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 : java.sql.SQLSyntaxErrorException (error code 2000)


Sujet :

JPA Java

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 : 402
    Points : 153
    Points
    153
    Par défaut JPA : java.sql.SQLSyntaxErrorException (error code 2000)
    Bonjour,

    Je suis empêtré depuis plusieurs jours avec un problème que je n'arrive pas à résoudre.
    J'ai un formulaire web de saisie de produits, mais à l'enregistrement dans ma base, j'obtiens l'erreur suivante :

    Internal Exception: java.sql.SQLSyntaxErrorException: Tentative de modification de la colonne d'identité 'ID'.
    Error Code: 20000
    Call: INSERT INTO PRODUCT (ID, NAME, SELLING_PRICE) VALUES (?, ?, ?)
    bind => [3 parameters bound]

    Quelqu’un peut-il m'aider ? J'ai trop mal à la tête

    Merci pour votre réponse ...

  2. #2
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    La colonne dans la table aurait été créée comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ID INTEGER AS IDENTITY NOT NULL
    Si c'est le cas, on ne peut pas passer de valeur puisque c'est le SGBDR qui s'en occupe.

    Il faut bien sûr que le mapping de l'entity en fasse mention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        @Id
        @Column(name = "ID", unique = true, nullable = false)
        @GeneratedValue(strategy=GenerationType.IDENTITY)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 : 402
    Points : 153
    Points
    153
    Par défaut
    - La table PRODUCT :

    CREATE TABLE product (
    id INT NOT NULL GENERATED ALWAYS AS IDENTITY,
    name VARCHAR(255) NOT NULL,
    selling_price DOUBLE DEFAULT 0,
    PRIMARY KEY (id)
    );

    - L'entité PRODUCT :

    @Entity
    @Table(name = "PRODUCT")
    public class Product implements java.io.Serializable {

    @Column(name = "ID")
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int identifiant;
    ...

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 : 402
    Points : 153
    Points
    153
    Par défaut
    Ca marche en utilisant IDENTITY pour stratégie ... mais je ne comprends pas la différence SEQUENCE / IDENTITY !

  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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Une SEQUENCE est un mécanisme sur certaines bases de données pour chercher le prochain numéro.
    Dans l'expression la plus simple, on créé une Sequence avec l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE SEQUENCE nom_de_sequence
    .
    Plus complexe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE SEQUENCE nom_de_sequence START WITH 1 INCREMENT BY 1 MAXVALUE 9999
    On peut accéder à la valeur comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom_de_sequence.nextval from dual;
    Avec IDENTITY, c'est le SGBDR qui se charge de récupérer un numéro incrémenter automatiquement à chaque insert.
    Là, il n'y a rien à prévoir, ni à faire...

    Bref, ce n'est pas du tout le même mécanisme
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 : 402
    Points : 153
    Points
    153
    Par défaut
    Merci beaucoup pour ces explications très claires

  7. #7
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 : 402
    Points : 153
    Points
    153
    Par défaut
    Mais j'ai une autre question : pourquoi je peux insérer des produits sans nom, alors que cette colonne est définie not null ? : je ne peux pas le faire sous Sql, mais je peux le faire via mon formulaire !!!!

  8. #8
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Si te regarde bien dans ta table, l'enregistrement n'a pas NULL comme valeur mais "blanc".
    Ce qui est normal, un formulaire ne renvoie pas NULL pour un champ d'input mais bien un blanc.
    Du côté de ton contrôleur (servlet), un request.getParameter("NomChamp") ne reverrait NULL que si le champ n'était pas présent dans le formulaire ou si le champ avait l'attribut disabled="true"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 : 402
    Points : 153
    Points
    153
    Par défaut
    Ok j'ai compris. Merci.

    Autre question : Dans un Datatable de formulaire HTML/JSF avec champs éditables (inputText), j'effectue des actions de contrôle des champs saisis à partir d'un bouton.
    Est-il possible de déclencher une action en sortie de champ, ou après modification d'un champ ?

  10. #10
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Oui bien sûr, il y a plusieurs manières de faire, en voici 2 (avec Primefaces)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    <p:inputText id="monChamp" value="...">
       <p:ajax event="change" process="monChamp" listener="UnManagedBean.uneMethode"/>
    </p:inputText>
    Ou alors avec un Validator
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    <p:inputText id="monChamp" value="..." validator="monValidator">
        <p:ajax event="change" process="monChamp"/>
    </p:inputText>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 : 402
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Sur le site de PrimeFaces, j'ai téléchargé le fichier primefaces-6.0.jar mais je ne sais pas quoi en faire !

    Merci de votre aide

  12. #12
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Dans sa plus simple expression, tu mets le jar dans le répertoire /WEB-INF/lib de ton projet web et ça devrait fonctionner.
    Pour les options, regarde la documentation...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/12/2011, 09h37
  2. Réponses: 2
    Dernier message: 20/04/2008, 22h40
  3. Réponses: 8
    Dernier message: 20/04/2008, 12h23
  4. Réponses: 3
    Dernier message: 31/07/2006, 15h07
  5. Du PL/SQL dans du code Java
    Par tikiwine dans le forum JDBC
    Réponses: 12
    Dernier message: 02/03/2006, 16h16

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