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

AngularJS Discussion :

[JHipster] contrainte unicité en base : error.internalServerError


Sujet :

AngularJS

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut [JHipster] contrainte unicité en base : error.internalServerError
    Bonjour,

    j'ai ajouté une contrainte d'unicité sur des champs en base d'une application AngularJS. Lorsque j'essaie d'enregistrer une donnée existante j'ai le message "error.internalServerError".
    Comment puis-je récupérer une erreur plus claire ?

    Pour ajouter la contrainte d'unicité (ça fonctionne, la base est bien modifiée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	<addUniqueConstraint
                columnNames="nom_court_projet"
                constraintName="unique_nom_court_projet"
                deferrable="true"
                disabled="true"
                initiallyDeferred="true"
                tableName="projet"/>
    L'affichage :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	        <div class="form-group col-md-2">
    	            <label class="control-label" data-translate="cricApp.projet.nomCourtProjet" for="field_nomCourtProjet">Nom court</label>
    	            <input type="text" class="form-control" name="nomCourtProjet" id="field_nomCourtProjet"
    	                    ng-model="vm.projet.nomCourtProjet"
    	                    required />
    	            <div ng-show="editForm.nomCourtProjet.$invalid">
    	                <p class="help-block"
    	                    ng-show="editForm.nomCourtProjet.$error.required" data-translate="entity.validation.required">
    	                    This field is required.
    	                </p>
    	            </div>
    	        </div

    Le contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            function save () {
                vm.isSaving = true;
                if (vm.projet.id !== null) {
                    Projet.byId.update(vm.projet, onSaveSuccess, onSaveError);
                } else {
                    Projet.byId.save(vm.projet, onSaveSuccess, onSaveError);
                }
            }
    L'erreur complète dans la console donne un bon message d'erreur : "Duplicata du champ 'DMP' pour la clef 'unique_nom_court_projet'"
    org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:278)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521)
    ...
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:207)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:802)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:72)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211)
    at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3281)
    ...
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517)
    ... 148 common frames omitted
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicata du champ 'DMP' pour la clef 'unique_nom_court_projet'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    ...
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
    ... 163 common frames omitted
    Christophe

    Pensez à mettre quand c'est le cas.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Il y a peut-être un oubli dans le Java. J'ai ajouté "@UniqueConstraint" et "unique=true", mais ça ne change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Entity
    @Table(name = "projet", uniqueConstraints=@UniqueConstraint(columnNames={"nom_court_projet"}))
    public class Projet implements Serializable {
    	@NotNull
    	@Column(name = "nom_court_projet", nullable = false, unique=true)
    	private String nomCourtProjet;
    Christophe

    Pensez à mettre quand c'est le cas.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    J'ai fini par y arriver mais comme je n'arrive pas à avoir plus précis qu'une erreur 500, toutes les erreurs 500 sont traitées comme un problème d'unicité.
    Pour ceux que ça intéresse, voici comment j'affiche le message d'erreur personnalisé :
    html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        	<div class="row" ng-show="vm.error">
            	<jhi-alert-error></jhi-alert-error>
    		</div>
            <div class="alert alert-danger" ng-show="vm.errorDataAlreadyExists">
                <strong>Nom court ou code PRT d&eacute;j&agrave; existant !</strong> Choisissez en un autre ou mettez &agrave; jour le projet correspondant.
            </div>

    Contrôleur :
    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
                if (vm.projet.id !== null) {
                	Projet.byId.update(vm.projet, onSaveSuccess, onSaveError).$promise.then(function () {
    	                vm.success = 'OK';
                    }).catch(function (response) {
                        vm.success = false;
                        if (response.status === 500 && response.data.message == 'error.internalServerError') {
                            vm.errorDataAlreadyExists = 'ERROR';
                        } else {
                            vm.error = 'ERROR';
                        }
                    })
                } else {
                	Projet.byId.save(vm.projet, onSaveSuccess, onSaveError).$promise.then(function () {
    	                vm.success = 'OK';
                    }).catch(function (response) {
                        vm.success = false;
                        if (response.status === 500 && response.data.message == 'error.internalServerError') {
                            vm.errorDataAlreadyExists = 'ERROR';
                        } else {
                            vm.error = 'ERROR';
                        }
                    })
                }
    Christophe

    Pensez à mettre quand c'est le cas.

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

Discussions similaires

  1. contraintes sur deux bases
    Par Rocou dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 19/09/2008, 15h37
  2. bash: 079: value too great for base (error token is "079")
    Par dams78 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 19/03/2008, 21h59
  3. Afficher les contraintes d'une base
    Par ruiz.nicolas dans le forum AS/400
    Réponses: 12
    Dernier message: 22/11/2007, 09h12
  4. Obtenir la liste des contraintes d'une Base
    Par arnauann dans le forum Administration
    Réponses: 2
    Dernier message: 25/05/2007, 16h30
  5. Lister les contraintes d'une base
    Par squallJ dans le forum Oracle
    Réponses: 2
    Dernier message: 10/02/2006, 14h57

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