#java #spring-boot #spring-data-jpa
#java #spring-boot #spring-data-jpa
Вопрос:
Я разрабатываю небольшую cms, и я использую spring data jpa
ее для работы с базой данных.
Когда я добавляю новую страницу, я хочу убедиться, что пуля еще не существует, для этой цели я добавил метод в свой репозиторий:
public interface PageRepository extends JpaRepository<Page, Integer> {
Page findBySlug(String slug);
}
Это отлично работает при добавлении.
Однако при редактировании страницы я хочу проверить, что пуля еще не существует, но НЕ для текущей страницы, как я могу это сделать? Я думаю, я мог бы каким-то образом передать текущий идентификатор строки или что-то в этом роде, но как мне это сделать?
Комментарии:
1. вы можете написать пользовательский запрос JPQL, если вы не можете сделать это с помощью DSL
2. вы хотите проверить: ВЫБЕРИТЕ * со страниц, КОТОРЫХ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ slug со страниц p)?? Итак, вы хотите проверить, есть ли в вашей таблице страниц какая-либо строка, содержащая переменную slug?
3. Я надеялся, что это возможно с помощью какой-то автоматической программы без JPQL
4. Возможно, поле флага в сущности страницы? Отредактировано? Просто бессвязно.
5. Если вы используете
spring-data-rest
, вы можете выполнить проверку в@HandleBeforeSave
обработчике
Ответ №1:
Вы можете написать
Page findBySlugAndIdNot(String slug,Long id)
где id — это имя вашего идентификатора в сущности с правильным типом. Посмотрите документацию
Ответ №2:
вы можете попробовать пользовательский запрос, например :
@Query("SELECT CASE WHEN COUNT(c) > 0 THEN true ELSE false END FROM Page p WHERE p.slug = :slug and p.pageId!=pageId")
public boolean existsBySlugInPage(@Param("slug") String slug, @Param("pageId") Integer pageId);