Как и в заголовке - метод удаления не удаляет запись из базы данных, но контроллер возвращает код 204, что означает, что запрос был обработан правильно.@Transactional
public void deleteFlashcardSet(Long userId, Long flashcardSetId) {
entityManager.clear();
FlashcardSet flashcardSet = flashcardSetRepository.findById(flashcardSetId)
.orElseThrow(() -> new ResourceNotFoundException("Flashcard set not found"));
if(!flashcardSet.getUser().getUserId().equals(userId)){
throw new UnauthorizedException("User does not have permission to delete this flashcard set");
}
flashcardSetRepository.delete(flashcardSet);
}
< /code>
Entity: < /p>
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "FlashcardSets")
public class FlashcardSet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long flashcardSetId;
private String name;
private Date createdAt;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
@JsonBackReference
private User user;
@OneToMany(mappedBy = "flashcardSet", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private List flashcards;
@PrePersist
protected void onCreate() {
this.createdAt = new Date();
}
}
< /code>
Entity (я не знаю, если необходимо, но я тоже добавлю это): < /p>
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "Flashcards")
public class Flashcard {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long flashcardId;
private String frontContent;
private String backContent;
private int repetitionCount;
private Date createdAt;
private int xpReward;
@ManyToOne
@JoinColumn(name = "flashcard_set_id", nullable = false)
@JsonBackReference
private FlashcardSet flashcardSet;
@PrePersist
protected void onCreate() {
this.createdAt = new Date();
}
}
< /code>
Из того, что я проверил до сих пор, delete () работает только в двух случаях: < /p>
Добавление EntityManager.clear () (как в коде службы FlashCardset выше) < /li>
Создание прямого запроса в DataBase: < /li>
@Modifying
@Query("DELETE FROM FlashcardSet fs WHERE fs.flashcardSetId = :flashcardSetId AND fs.user.userId = :userId")
void deleteByIdAndUserId(@Param("flashcardSetId") Long flashcardSetId, @Param("userId") Long userId);
< /code>
, а затем с использованием deletebyidanduserid () в службе вместо регулярного delete ().
Я думаю, что проблема находится где -то в контексте постоянства. Я не знаю, хорошо ли мое решение или это можно сделать лучше. Кстати DeleteByid тоже не работает.
Подробнее здесь: https://stackoverflow.com/questions/796 ... m-database
Spring Boot JPA: delete () возвращает 204, но запись не удаляется из базы данных ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Spring Boot JPA: delete () возвращает 204, но запись не удаляется из базы данных
Anonymous » » в форуме JAVA - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Spring Boot JPA: delete () возвращает 204, но запись не удаляется из базы данных
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-