Как создать SQL-запрос для сохранения объекта, если другой объект не существует в базе данных MySQL?

#mysql #spring #spring-data-jpa

#mysql #spring #spring-data-jpa

Вопрос:

У меня есть объект entity, который я пытаюсь сохранить в базе данных MySQL. Я использую интерфейс, который реализует JpaRepository. Я хочу написать запрос, который сохранит объект, если определенные поля указанного объекта НЕ совпадают с соответствующими полями уже сохраненных объектов.

У меня есть следующий запрос, который позволит достичь этого

 insert into tableA(col_1,col_2,col_3) 
  select 'string_1','string_2','string_3'
  where not exists(select col_1 
                   from tableA
                   where col_1='string_1')
 

Как я могу перевести это для работы с JpaRepository?

Комментарии:

1. Вы, конечно, могли бы сделать это, используя некоторые условные операторы SQL, но по ряду причин гораздо лучше перенести такую логику на уровень обслуживания (т. Е. Разделение задач, гораздо проще кодировать условные выражения на Java .. и т. Д.). Если, конечно, у вас нет каких-либо ограничений или выпросто хочу попрактиковаться в SQL.

2. Я вижу. Итак, я сначала проверяю, есть ли объект в настоящее время в БД с col_1 = ‘string_1’ , затем, основываясь на этом факте, выбираю сохранить или не сохранять объект?

3. Точно. Сначала вы создадите метод для поиска уже существующих записей, которые удовлетворяют требуемому условию. (посмотрите здесь для именованных запросов JPA docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference /… ). И затем, в зависимости от ваших результатов, вы можете сохранить свой новый экземпляр объекта, используя репозиторий CRUD, как описано здесь docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference /…