Удалить все записи, кроме одной в базе данных - PullRequest
0 голосов
/ 21 декабря 2018

Я должен удалить все записи для соответствующего идентификатора, кроме одной.Нет столбца данных, который я могу рассмотреть.Dtatastruchtur e, как показано ниже:

OBJECT_ID - primary key
DOC_ID
FIRST NAME
LAST NAME

Я пытаюсь удалить все doc_ID, которые соответствуют определенному номеру, кроме одного через jpa.Не удалось найти какую-либо конкретную функцию jpa.Я реализую JPARepository.Есть Удалить все, Есть ли способ, которым я могу достичь этого?

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    public User save(User user);

    public void deleteAllByDocID(String docID);
}

ОБНОВЛЕНИЕ: Извините, не был уверен в базе данных: мы используем DB2, и я попытался записать эти запросы:

  DELETE FROM USR WHERE OBJ_ID NOT IN (SELECT OBJ_ID FROM USR WHERE DOC_OBJ_ID='91298' FETCH FIRST 1 ROWS ONLY); - this gives me error transaction log is full.

И это:

  DELETE FROM USR WHERE OBJ_ID NOT IN (SELECT TOP(1) OBJ_ID FROM USR WHERE DOC_OBJ_ID='91298'); - and this give me error TOP is not a function

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

если вы не хотите использовать пользовательский запрос, вы можете сделать это следующим образом:

в вашем хранилище определите эти два метода

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

   User findFirstByDocIDOrderByObjectIDAsc(String docID);
   void deleteAllByDocIDAndObjectIDNot(String docID, Long objectID);
}

, а затем на уровне службысделайте это

User user = repository.findFirstByDocIDOrderByObjectIDAsc(docID);
if(user !=null) deleteAllByDocIDAndObjectIDNot(docID, user.objectID);

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

0 голосов
/ 21 декабря 2018

Сначала вы можете COUNT сопоставить записи, а затем удалить с помощью LIMIT N-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...