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 :

Contrainte unique ne fonctionne pas bien


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut Contrainte unique ne fonctionne pas bien
    salut a tous,

    j'ai une entité avec un colonne unique, lorsque j'essaie de tester mon entité, j'essaie de violé la contraint, mais aucune exception ne déclenche au niveau de l'entitymanager.

    l'exception se leve au moment de commit.

    moi je veux detecter la violation au niveau de l'insertion ( create ) à l'entitymanager!

    est ce que j'ai besoin de quelque modification au niveau de fichier de configuration contexte.xml ou au niveau de l'entity !??

    merci a vous

  2. #2
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Salut !

    Citation Envoyé par teken-new Voir le message
    j'ai une entité avec un colonne unique, lorsque j'essaie de tester mon entité, j'essaie de violé la contraint, mais aucune exception ne déclenche au niveau de l'entitymanager.

    l'exception se leve au moment de commit.
    C'est normal...

    Quand tu fais un create, l'entité devient Transient puis persitente après la sauvegarde (save). Comme quand tu fais une insertion (modification de l'entité) et un save, l'entité est "suivie"; elle est sauvegardée dans le cache mais pas en base. A moins que tu fasses un flush ou un commit.
    Une entité persistée n'est pas forcément commitée.

    Lors du démarrage, seule la vérification de la structure de tes entités est vérifiée. C'est normal que tu n'ais pas d'exception concernant celles-ci. Lors du commit ou du flush, l'exception que tu as est renvoyée par la base de données.

    Regarde la doc sur le cycle de vie des entités.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    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
    Par défaut
    Citation Envoyé par slim Voir le message
    Salut !



    C'est normal...

    Quand tu fais un create, l'entité devient Transient puis persitente après la sauvegarde (save). Comme quand tu fais une insertion (modification de l'entité) et un save, l'entité est "suivie"; elle est sauvegardée dans le cache mais pas en base. A moins que tu fasses un flush ou un commit.
    Une entité persistée n'est pas forcément commitée.

    Lors du démarrage, seule la vérification de la structure de tes entités est vérifiée et non les contraintes. C'est normal que tu n'ais pas d'exception concernant celles-ci. Lors du commit ou du flush, l'exception que tu as est renvoyée par la base de données.

    Regarde la doc sur le cycle de vie des entités.
    Bonjour, je ne connais pas cette doc sur le cycle des entités, et je veux bien voir,on apprend tous les jours .Pour moi il y'a un dysfonctionnement,s'il faut attendre un retour de la base au moment du commit c'est que l'annotation mise au niveau JPA ne sert à rien. c'est @teken-new qui a raison,un commit valide la transaction (qui a déjà effectué l'operation, mais ne l'a pas propagé). Peut on voir le mapping de l'entité en question?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    A mon avis, l'annotation sert uniquement à créer la contrainte en base de données.

    Edit:
    C'est d'ailleurs ce que dit la doc:
    http://docs.oracle.com/javaee/6/api/...onstraint.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Specifies that a unique constraint is to be included in the generated DDL for a primary or secondary table.

  5. #5
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Bonjour, je ne connais pas cette doc sur le cycle des entités, et je veux bien voir,on apprend tous les jours .Pour moi il y'a un dysfonctionnement,s'il faut attendre un retour de la base au moment du commit c'est que l'annotation mise au niveau JPA ne sert à rien. c'est @teken-new qui a raison,un commit valide la transaction (qui a déjà effectué l'operation, mais ne l'a pas propagé). Peut on voir le mapping de l'entité en question?
    Autant pour moi, quand j'ai lu "colonne unique" j'ai compris une seule propriété dans la table et non pas l'annotation @UniqueConstraint...

    [EDIT]@teken_new :
    Tu devrais poster ton mapping (entité) et le code de ton test. Je pense que c'est ton mapping ou ta configuration qui ne sont pas bons.[/EDIT]
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  6. #6
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Bonjour, je ne connais pas cette doc sur le cycle des entités, et je veux bien voir,on apprend tous les jours .
    Par exemple : http://www.objectdb.com/java/jpa/persistence/managed
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  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
    Par défaut
    En fait je voulais une doc expliquant la théorie sur l'annotation de contrainte unique que tu exposais précédemment.Merci tout de même pour le lien.Je crois qu'on s'est finalement compris,c'est l'essentiel.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    salut,

    dsl pour le retard, j'etais en plein travaille cette semaine, pour le mapping j'ai une schema de plusieurs table, mais pour l'instant je test k'avec un seul puisque le principe est le meme.

    voici le code de l'intité :
    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
    @Entity
    @Table(name = "profession", catalog = "catalog1", schema = "", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"titreProfession"})})
    @NamedQueries({
        @NamedQuery(name = "Profession.findAll", query = "SELECT p FROM Profession p"),
    //    @NamedQuery(name = "Profession.findByIdProfession", query = "SELECT p FROM Profession p WHERE p.idProfession = :idProfession"),
        @NamedQuery(name = "Profession.findByTitreProfession", query = "SELECT p FROM Profession p WHERE p.titreProfession = :titreProfession")
    })
    public class Profession implements Serializable {
     
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @Column(name = "idProfession", nullable = false)
        private Integer idProfession;
     
        @Basic(optional = false)
        @Column(name = "titreProfession", nullable = false, length = 30)
        private String titreProfession;
     
        @OneToMany(mappedBy = "idProfession", fetch = FetchType.LAZY)
        private List<Beneficiaire> beneficiaireList;
     
        public Profession() {
    }
     
    // getter et setter

    pour le "uniqueConstraints" je pense qu'il doit gerer cette constrainte avant de commiter ou flusher les donnée !

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

Discussions similaires

  1. Insertion avec contraintes qui ne fonctionnent pas
    Par max44410 dans le forum Requêtes
    Réponses: 4
    Dernier message: 08/01/2008, 23h03
  2. Mon tri de date ne fonctionne pas bien :(
    Par rohstev dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/07/2007, 10h58
  3. [MySQL] Boucle qui ne fonctionne pas bien que la 1ère fois
    Par R.L. dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/05/2006, 21h59
  4. Icone systray de connexion wifi ne fonctionne pas bien ?
    Par elitost dans le forum Windows XP
    Réponses: 5
    Dernier message: 24/02/2006, 09h43
  5. [PERL] un grep qui ne fonctionne pas bien
    Par LE NEINDRE dans le forum Langage
    Réponses: 6
    Dernier message: 03/11/2005, 16h37

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