[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:
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:
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:
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'"
Citation:
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