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 :

id généré automatiquement


Sujet :

JPA Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut id généré automatiquement
    salut , je voudrait en inserant un objet dans la table , l'id soit généré automatiquement
    j'ai utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
           @Id
    	@GeneratedValue(strategy=GenerationType.SEQUENCE)
    	private Integer idcompte;
    mais en effctuent , j'obtient une exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b41-beta2 (03/30/2007))): oracle.toplink.essentials.exceptions.DatabaseException
    Internal Exception: org.postgresql.util.PSQLException: ERROR: null value in column "idcompte" violates not-null constraint
    Error Code: 0

  2. #2
    Membre régulier

    Inscrit en
    Septembre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2005
    Messages : 99
    Points : 118
    Points
    118
    Par défaut auto
    BOnjour,

    il me semble qu'il faut déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @GeneratedValue(strategy=GenerationType.AUTO)

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par ReunionIsland Voir le message
    BOnjour,

    il me semble qu'il faut déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @GeneratedValue(strategy=GenerationType.AUTO)
    merci pour l'aide mais votre idée m'a généré l'erreur suivante:
    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
    Internal Exception: org.postgresql.util.PSQLException: ERROR: relation "sequence" does not exist
    Error Code: 0
    Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
    	bind => [50, SEQ_GEN]
    Query: DataModifyQuery()
    	at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:296)
    	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:639)
    	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:688)
    	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:477)
    	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:437)
    	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeCall(AbstractSession.java:675)
    	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:213)
    	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:199)
    	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:242)
    	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:222)
    	at oracle.toplink.essentials.queryframework.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:71)
    	at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:609)
    	at oracle.toplink.essentials.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:1815)
    	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:937)
    	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909)
    	at oracle.toplink.essentials.sequencing.QuerySequence.update(QuerySequence.java:329)
    	at oracle.toplink.essentials.sequencing.QuerySequence.updateAndSelectSequence(QuerySequence.java:268)
    	at oracle.toplink.essentials.sequencing.StandardSequence.getGeneratedVector(StandardSequence.java:81)
    	at oracle.toplink.essentials.sequencing.DefaultSequence.getGeneratedVector(DefaultSequence.java:153)
    	at oracle.toplink.essentials.sequencing.Sequence.getGeneratedVector(Sequence.java:266)
    	at oracle.toplink.essentials.internal.sequencing.SequencingManager$Preallocation_Transaction_NoAccessor_State.getNextValue(SequencingManager.java:404)
    	at oracle.toplink.essentials.internal.sequencing.SequencingManager.getNextValue(SequencingManager.java:832)
    	at oracle.toplink.essentials.internal.sequencing.ClientSessionSequencing.getNextValue(ClientSessionSequencing.java:95)
    	at oracle.toplink.essentials.internal.descriptors.ObjectBuilder.assignSequenceNumber(ObjectBuilder.java:225)
    	at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.assignSequenceNumber(UnitOfWorkImpl.java:341)
    	at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNotRegisteredNewObjectForPersist(UnitOfWorkImpl.java:3255)
    	at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.registerNotRegisteredNewObjectForPersist(RepeatableWriteUnitOfWork.java:323)
    	at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:3206)
    	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:190)

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Peut on voir le contenu de ta classe entité?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Quel RDBMS utilise-tu ?
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  6. #6
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Peut on voir le contenu de ta classe entité?
    voici la classe:
    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
     
     
    import java.io.Serializable;
    import java.sql.Date;
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.SequenceGenerator;
    import javax.persistence.Table;
     
     
    @Entity
    @Table(name="comptesframerelay",schema="netadmin")
    public class Comptesframerelay implements Serializable {
    	@Id
    	private Integer idcompte;
     
    	private String login;
     
    	private String password;
     
    	private String framerelaysmtpserver;
     
    	private Integer framerelaysmtpport;
     
    	private String framerelaydns;
     
    	private Date datecreation;
     
    	private String proprietaire;
     
    	@ManyToOne
    	@JoinColumn(name="createur")
    	private Utilisateurs createur;
     
    	private static final long serialVersionUID = 1L;
     
    	public Comptesframerelay() {
    		super();
    	}
     
    	@SequenceGenerator(name="CUST_SEQ", initialValue=10)
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CUST_SEQ")
    	public Integer getIdcompte() {
    		return this.idcompte;
    	}
     
    	public void setIdcompte(Integer idcompte) {
    		this.idcompte = idcompte;
    	}
     
    	public String getLogin() {
    		return this.login;
    	}
     
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	public String getPassword() {
    		return this.password;
    	}
     
    	public void setPassword(String password) {
    		this.password = password;
    	}
     
    	public String getFramerelaysmtpserver() {
    		return this.framerelaysmtpserver;
    	}
     
    	public void setFramerelaysmtpserver(String framerelaysmtpserver) {
    		this.framerelaysmtpserver = framerelaysmtpserver;
    	}
     
    	public Integer getFramerelaysmtpport() {
    		return this.framerelaysmtpport;
    	}
     
    	public void setFramerelaysmtpport(Integer framerelaysmtpport) {
    		this.framerelaysmtpport = framerelaysmtpport;
    	}
     
    	public String getFramerelaydns() {
    		return this.framerelaydns;
    	}
     
    	public void setFramerelaydns(String framerelaydns) {
    		this.framerelaydns = framerelaydns;
    	}
     
    	public Date getDatecreation() {
    		return this.datecreation;
    	}
     
    	public void setDatecreation(Date datecreation) {
    		this.datecreation = datecreation;
    	}
     
    	public String getProprietaire() {
    		return this.proprietaire;
    	}
     
    	public void setProprietaire(String proprietaire) {
    		this.proprietaire = proprietaire;
    	}
     
    	public Utilisateurs getCreateur() {
    		return this.createur;
    	}
     
    	public void setCreateur(Utilisateurs createur) {
    		this.createur = createur;
    	}
     
    }

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Voila ton erreur =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CUST_SEQ")
    Tu lui dis de récuperer les valeurs de la clé dans une colonne de type sequence, mais seulement cette sequence n'existe pas au dessus de ta classe.
    Voila un exemple de ce que tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    @Entity
    @Table(name="comptesframerelay",schema="netadmin")
    @SequenceGenerator(name = "CUST_SEQ", sequenceName = "nom_de_ta_colonne_sequentielle_dans_la_base", allocationSize = 1)
    public class Comptesframerelay implements Serializable {
    ...
    Voila voila...
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  8. #8
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Voila ton erreur =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CUST_SEQ")
    Tu lui dis de récuperer les valeurs de la clé dans une colonne de type sequence, mais seulement cette sequence n'existe pas au dessus de ta classe.
    Voila un exemple de ce que tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    @Entity
    @Table(name="comptesframerelay",schema="netadmin")
    @SequenceGenerator(name = "CUST_SEQ", sequenceName = "nom_de_ta_colonne_sequentielle_dans_la_base", allocationSize = 1)
    public class Comptesframerelay implements Serializable {
    ...
    Voila voila...
    merci DevServlet pour la réponse mais toujours le même probleme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "idcompte" violates not-null constraint

  9. #9
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Ce n'est pas le même problème, t'as visiblement un petit souci de compréhension du framework.
    T'as 4 politiques de génération de clé primaire en JPA:
    -SEQUENCE ==> tu désignes une colonne dans la base censé contenir les valeurs que récupérera JPA pour attribuer sequentiellement aux objets crées, il faudrait pour cela que dans ta base ces colonnes existent, au niveau de la base tu peux créer ces colonnes nominativement ou automatiquement (en désignant une clé primaire SERIAL)
    -Automatique ==> là tu laisses la génération de clé à la charge complète de ton framework
    -IDENTITY==> tu désignes également une colonne de la base, sauf qu'elle n'est pas séquentielle
    -Manuelle, tu attribues toi même les clés primaires.
    Dans ton cas, comment comptes tu générer tes clés?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  10. #10
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Ce n'est pas le même problème, t'as visiblement un petit souci de compréhension du framework.
    T'as 4 politiques de génération de clé primaire en JPA:
    -SEQUENCE ==> tu désignes une colonne dans la base censé contenir les valeurs que récupérera JPA pour attribuer sequentiellement aux objets crées, il faudrait pour cela que dans ta base ces colonnes existent, au niveau de la base tu peux créer ces colonnes nominativement ou automatiquement (en désignant une clé primaire SERIAL)
    -Automatique ==> là tu laisses la génération de clé à la charge complète de ton framework
    -IDENTITY==> tu désignes également une colonne de la base, sauf qu'elle n'est pas séquentielle
    -Manuelle, tu attribues toi même les clés primaires.
    Dans ton cas, comment comptes tu générer tes clés?
    j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @Entity
    @Table(name="comptesframerelay",schema="netadmin")
    @SequenceGenerator(name = "CUST_SEQ", sequenceName = "idcompte", allocationSize = 1)
    avec idcompte est la clé primaire de ma table
    ou est alors ma faute

  11. #11
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Ta faute c'est justement le fait d'avoir pris idcompte comme séquence.
    T'as toujours pas compris, tu ne dois pas mettre d'id primaire colonne séquentielle, c'est plutôt cette colonne séquentielle qui doit permettre à JPA d'attribuer automatiquement les valeurs à ton idcompte.
    Dis moi comme gères tu tes clés au niveau de cette table dans ta base physique? es tu en auto Increment , sérial dans la base, qu'elle BD utilises tu ?
    Moi j'utilise PGAdmin, mes clés sont des sérial, ainsi PgAdmin me génère des séquences par table, ce sont ces noms de séquences que j'attribue à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @SequenceGenerator(name = "CUST_SEQ", sequenceName = "nom_de_ma_sequence_dans_la_base", allocationSize = 1)
    Si la politique de séquence te perturbe tu fais simplement celle ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    public int getIcompte()
    return idCompte;
    ...
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  12. #12
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Ta faute c'est justement le fait d'avoir pris idcompte comme séquence.
    T'as toujours pas compris, tu ne dois pas mettre d'id primaire colonne séquentielle, c'est plutôt cette colonne séquentielle qui doit permettre à JPA d'attribuer automatiquement les valeurs à ton idcompte.
    Dis moi comme gères tu tes clés au niveau de cette table dans ta base physique? es tu en auto Increment , sérial dans la base, qu'elle BD utilises tu ?
    Moi j'utilise PGAdmin, mes clés sont des sérial, ainsi PgAdmin me génère des séquences par table, ce sont ces noms de séquences que j'attribue à ça ::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @SequenceGenerator(name = "CUST_SEQ", sequenceName = "nom_de_ma_sequence_dans_la_base", allocationSize = 1)
    Si la politique de séquence te perturbe tu fais simplement celle ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    public int getIcompte()
    return idCompte;
    ...
    si j'ai bien compris, alors il faut ajouter une autre colonne dans ma table pour gérer les valeurs de mon id
    dans mon cas ,j'utilise comme vous une base postgre et j'utilise PGAdmin
    pour mieux clarifier, voici ma table :
    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
     
    CREATE TABLE netadmin.comptesframerelay
    (
      idcompte serial NOT NULL,
      "login" text,
      "password" text,
      framerelaysmtpserver text,
      framerelaysmtpport integer,
      framerelaydns text,
      datecreation date,
      createur text,
      proprietaire text,
      CONSTRAINT comptesframerelay_pkey PRIMARY KEY (idcompte),
      CONSTRAINT comptesframerelay_createur_fkey FOREIGN KEY (createur)
          REFERENCES netadmin.utilisateurs ("type") MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    ) 
    WITHOUT OIDS;
    ALTER TABLE netadmin.comptesframerelay OWNER TO postgres;
    COMMENT ON TABLE netadmin.comptesframerelay IS 'comptes pour le clients dont l''accés est frame relay';

  13. #13
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Très bien, regardes attentivement dans ta base, juste avant le + de tables, tu dois avoir un '+' derriere lequel est ecrit 'Séquences', tu le deroules et tu cherches le nom de la sequence de ta table.
    Le vois tu?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  14. #14
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Très bien, regardes attentivement dans ta base, juste avant le + de tables, tu dois avoir un '+' derriere lequel est ecrit 'Séquences', tu le deroules et tu cherches le nom de la sequence de ta table.
    Le vois tu?
    oui je l'ai vu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE SEQUENCE netadmin.comptesframerelay_idcompte_seq
      INCREMENT 1
      MINVALUE 1
      MAXVALUE 9223372036854775807
      START 1
      CACHE 1;
    ALTER TABLE netadmin.comptesframerelay_idcompte_seq OWNER TO postgres;

  15. #15
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Tu fais donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    @Table(name = "comptesframerelay")
    @SequenceGenerator(name = "sequenceCompte", sequenceName = "comptesframerelay_idcompte_seq ", allocationSize = 1)
    ...
     
    @Id
    	@Column(name = "idcompte ", nullable = false, unique = true)
    	@GeneratedValue(generator = "sequenceCompte")
    	public int getIdCompte() {
    		return idCoompte;
    	}
    Et donc ca doit marcher.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  16. #16
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Tu fais donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    @Table(name = "comptesframerelay")
    @SequenceGenerator(name = "sequenceCompte", sequenceName = "comptesframerelay_idcompte_seq ", allocationSize = 1)
    ...
     
    @Id
    	@Column(name = "idcompte ", nullable = false, unique = true)
    	@GeneratedValue(generator = "sequenceCompte")
    	public int getIdCompte() {
    		return idCoompte;
    	}
    Et donc ca doit marcher.
    ca pa marché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "idcompte" violates not-null constraint
    une autre remarque:lorsque je met l'annotation@Id juste avant la methode getIdcompte,mêùe la connexion n'est pas abouti
    il faudra que je met l'annotaion juste avant l'attribut ID

  17. #17
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Tu peux me remettre le code complet de ta classe entité et le bout de code qui doit faire l'insertion?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  18. #18
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Tu peux me remettre le code complet de ta classe entité et le bout de code qui doit faire l'insertion?
    voici ma classe entité:
    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
     
    @Entity
    @Table(name="comptesframerelay",schema="netadmin")
    @SequenceGenerator(name = "sequenceCompte", sequenceName = "netadmin.comptesframerelay_idcompte_seq", allocationSize = 1,initialValue=23)
    public class Comptesframerelay implements Serializable {
    	@Id
    	private Integer idcompte;
     
    	private String login;
     
    	private String password;
     
    	private String framerelaysmtpserver;
     
    	private Integer framerelaysmtpport;
     
    	private String framerelaydns;
     
    	private Date datecreation;
     
    	private String proprietaire;
     
    	@ManyToOne
    	@JoinColumn(name="createur")
    	private Utilisateurs createur;
     
    	private static final long serialVersionUID = 1L;
     
    	public Comptesframerelay() {
    		super();
    	}
     
     
    	@Column(name = "idcompte ", nullable = false, unique = true)
    	@GeneratedValue(generator = "sequenceCompte")
    	public Integer getIdcompte() {
    		return this.idcompte;
    	}
     
    	public void setIdcompte(Integer idcompte) {
    		this.idcompte = idcompte;
    	}
     
    	public String getLogin() {
    		return this.login;
    	}
     
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	public String getPassword() {
    		return this.password;
    	}
     
    	public void setPassword(String password) {
    		this.password = password;
    	}
     
    	public String getFramerelaysmtpserver() {
    		return this.framerelaysmtpserver;
    	}
     
    	public void setFramerelaysmtpserver(String framerelaysmtpserver) {
    		this.framerelaysmtpserver = framerelaysmtpserver;
    	}
     
    	public Integer getFramerelaysmtpport() {
    		return this.framerelaysmtpport;
    	}
     
    	public void setFramerelaysmtpport(Integer framerelaysmtpport) {
    		this.framerelaysmtpport = framerelaysmtpport;
    	}
     
    	public String getFramerelaydns() {
    		return this.framerelaydns;
    	}
     
    	public void setFramerelaydns(String framerelaydns) {
    		this.framerelaydns = framerelaydns;
    	}
     
    	public Date getDatecreation() {
    		return this.datecreation;
    	}
     
    	public void setDatecreation(Date datecreation) {
    		this.datecreation = datecreation;
    	}
     
    	public String getProprietaire() {
    		return this.proprietaire;
    	}
     
    	public void setProprietaire(String proprietaire) {
    		this.proprietaire = proprietaire;
    	}
     
    	public Utilisateurs getCreateur() {
    		return this.createur;
    	}
     
    	public void setCreateur(Utilisateurs createur) {
    		this.createur = createur;
    	}
     
    }
    la methode qui permet d'ajouter un entité est:
    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
     
    public boolean addCompteFrameRelaySMTP(Comptesframerelay compte ) {
     
    		JpaCompteFramerelayDao compteDao = new JpaCompteFramerelayDao();
    		//compte.setIdcompte((JpaCompteFramerelayDao.NombreDeCompte() + 1));
    		java.util.Date utilDate = new java.util.Date();
    		java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
    		compte.setDatecreation(sqlDate);
    		try {
    			compteDao.persist(compte);
    			LocalLogger.info(this.getClass().getCanonicalName(),"addCompte","Nouveau compte crée pour le client "+compte.getProprietaire());
    			System.out.println("insertion faite!!!!!!!!!");
    			return true;
    		} catch (Exception e) {
    			e.printStackTrace();
    			LocalLogger.error(this.getClass().getCanonicalName(),"addCompte","erreur lors de l'ajout d'un compte pour le client "+compte.getProprietaire()+" ;"+e.getMessage());
    			return true;
    		}

  19. #19
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    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
    @Entity
    @Table(name="comptesframerelay",schema="netadmin")
    @SequenceGenerator(name = "sequenceCompte", sequenceName = "netadmin.comptesframerelay_idcompte_seq", allocationSize = 1)
    public class Comptesframerelay implements Serializable {
     
    	private Integer idcompte;
     
    	private String login;
     
    	private String password;
     
    	private String framerelaysmtpserver;
     
    	private Integer framerelaysmtpport;
     
    	private String framerelaydns;
     
    	private Date datecreation;
     
    	private String proprietaire;
     
    	@ManyToOne
    	@JoinColumn(name="createur")
    	private Utilisateurs createur;
     
    	private static final long serialVersionUID = 1L;
     
    	public Comptesframerelay() {
    		super();
    	}
     
    	@Id
    	@Column(name = "idcompte ", nullable = false, unique = true)
    	@GeneratedValue(generator = "sequenceCompte")
    	public Integer getIdcompte() {
    		return this.idcompte;
    	}
     
    	public void setIdcompte(Integer idcompte) {
    		this.idcompte = idcompte;
    	}
    ...
    Suis exactement le code ci dessus,c'est un copier-coller de celui de mon projet qui marche bien. si ta colonne sequentielle existe bien dans la base et tourne tu devrais pouvoir inserer, si ca marche, essaie de faire une insertion manuelle directement dans PgAdmin, et regarde si cette colonne sequentielle s'increment.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  20. #20
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    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
    @Entity
    @Table(name="comptesframerelay",schema="netadmin")
    @SequenceGenerator(name = "sequenceCompte", sequenceName = "netadmin.comptesframerelay_idcompte_seq", allocationSize = 1)
    public class Comptesframerelay implements Serializable {
     
    	private Integer idcompte;
     
    	private String login;
     
    	private String password;
     
    	private String framerelaysmtpserver;
     
    	private Integer framerelaysmtpport;
     
    	private String framerelaydns;
     
    	private Date datecreation;
     
    	private String proprietaire;
     
    	@ManyToOne
    	@JoinColumn(name="createur")
    	private Utilisateurs createur;
     
    	private static final long serialVersionUID = 1L;
     
    	public Comptesframerelay() {
    		super();
    	}
     
    	@Id
    	@Column(name = "idcompte ", nullable = false, unique = true)
    	@GeneratedValue(generator = "sequenceCompte")
    	public Integer getIdcompte() {
    		return this.idcompte;
    	}
     
    	public void setIdcompte(Integer idcompte) {
    		this.idcompte = idcompte;
    	}
    ...
    Suis exactement le code ci dessus,c'est un copier-coller de celui de mon projet qui marche bien. si ta colonne sequentielle existe bien dans la base et tourne tu devrais pouvoir inserer, si ca marche, essaie de faire une insertion manuelle directement dans PgAdmin, et regarde si cette colonne sequentielle s'increment.
    comme j'ai dis: si je ne met pas l'annotation @Id au dessus de l'attribut idcompte, il ya quelque chose qui ne marche pas:en fait je sens si je fait ça que le table utilisateur n'est pas trouvé!!!
    il faut que je met donc cette notation seulement avant de déclarer l'attribut idcompte

Discussions similaires

  1. Identification de code généré automatiquement
    Par McManagan dans le forum Langage
    Réponses: 3
    Dernier message: 21/03/2007, 12h40
  2. Réponses: 3
    Dernier message: 16/02/2007, 18h49
  3. Réponses: 5
    Dernier message: 15/01/2007, 11h39
  4. Comment éditer le code généré automatiquement
    Par clebig dans le forum NetBeans
    Réponses: 4
    Dernier message: 07/06/2006, 15h26
  5. [vs2005]Disparition du code généré automatiquement
    Par boulete dans le forum Visual Studio
    Réponses: 5
    Dernier message: 04/02/2006, 18h18

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