Impossible d'exécuter la déclaration; SQL [n/a]; contrainte [null];
J'obtiens cette erreur lors de la suppression d'une ligne à partir d'un schéma:
Hibernate: select journal0_.id as id1_2_0_, journal0_.content as content2_2_0_, journal0_.filename as filename3_2_0_, journal0_.subject as subject4_2_0_, journal0_.tags as tags5_2_0_, journal0_.user_id as user_id6_2_0_, journal0_.version as version7_2_0_ from journal journal0_ where journal0_.id=?
Hibernate: select nextval ('hibernate_sequence')
Hibernate: insert into subscription (journal_id, user_id, version, id) values (?, ?, ?, ?)
2016-09-03 01:08:01.581 WARN 13462 --- [nio-8080-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 23505, SQLState: 23505
2016-09-03 01:08:01.581 ERROR 13462 --- [nio-8080-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : Unique index or primary key violation: "UK_9XFQUT5UKXNSBX8NL2LR23TC5_INDEX_9 ON PUBLIC.SUBSCRIPTION(USER_ID, JOURNAL_ID) VALUES (9, 2, 10)"; SQL statement:
insert into subscription (journal_id, user_id, version, id) values (?, ?, ?, ?) [23505-191]
2016-09-03 01:08:01.598 INFO 13462 --- [nio-8080-exec-9] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements
2016-09-03 01:08:01.632 ERROR 13462 --- [nio-8080-exec-9] c.j.exceptions.ErrorController : Exception during execution of SpringSecurity application
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
Même si la méthode delete avec les arguments appropriés est appelé encore à ce qu'il exécute la requête d'insertion qui est à l'origine des données violation question.
Voici le modèle:
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"userId", "journalId"})})
public class Subscription {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Version
private Integer version;
private Integer userId;
private Integer journalId;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return this.id;
}
public void setVersion(Integer version) {
this.version = version;
}
public Integer getVersion() {
return this.version;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getUserId() {
return this.userId;
}
public void setJournalId(Integer journalId) {
this.journalId = journalId;
}
public Integer getJournalId() {
return this.journalId;
}
}
C'est là que la suppression de la méthode est appelée:
@Override
public void unsubscribeJournalForSubscriber(Journal journal, Account subscriber) {
Subscription subscription = new Subscription();
subscription.setJournalId(journal.getId());
subscription.setUserId(subscriber.getId());
this.subscriptionRepository.delete(subscription);
}
", Même si la méthode delete avec les arguments appropriés est appelé..." -- où sont les preuves? Je vois deux sélectionne et un insert, pas de le supprimer.
J'ai voulu supprimer la méthode est utilisée avec un bon argument, mais encore de la requête d'insertion est effectuée au lieu de les supprimer . Comment venir ?
Avez vous franchi le code à l'endroit où vous en invoquant le
Oui Certainement que le code s'exécute .
J'ai voulu supprimer la méthode est utilisée avec un bon argument, mais encore de la requête d'insertion est effectuée au lieu de les supprimer . Comment venir ?
Avez vous franchi le code à l'endroit où vous en invoquant le
delete
méthode? Êtes-vous sûr que le code est en cours d'exécution?Oui Certainement que le code s'exécute .
OriginalL'auteur Rajeev Massey | 2016-09-02
Vous devez vous connecter pour publier un commentaire.
Pour la suppression de l'Abonnement de l'entité, vous devez définir la clé Primaire de l'entité, qui est
id
domaine de l'Abonnement de l'Entité. Cependant, vous êtes réglagejournalId
etuserId
le terrain et d'essayer de les supprimer.Vous ne devriez mettre la
id
domaine de l'Abonnement de l'entité et il sera supprimé.Mise à jour:
Votre référentiel de code doit être
Maintenant votre entreprise loginc code sera:
id est généré automatiquement et définir lors de l'insertion de l'entité. Si vous voulez supprimer, Vous devez définir l'id qui sera utilisé pour la suppression de cette entité particulière. Si vous ne connaissez pas, alors vous devez effectuer trouver les premier et ensuite les supprimer.
Est-il possible où je peux les supprimer à l'aide de journal_id et subscription_id?
Fournir votre code de référentiel..
OriginalL'auteur Md Zahid Raza
Si vous souhaitez supprimer des enregistrements sans l'aide de la clé primaire, puis de créer une requête pour que. créer une méthode dans la "SubscriptionRepository" appelé
puis utiliser cette méthode pour supprimer vos dossiers.@Modifying
@Query("delete from Subscription s where s.role. userId = ?1 and s. journalId = ?2")
deleteByUserIdJournalId(Integer userId,Integer journalId)
suivre cette https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
OriginalL'auteur Keaz